以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- 自行捕获报错异常时,有没有办法捕获是什么自定义函数触发? (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=148686) |
-- 作者:chen37280600 -- 发布时间:2020/4/13 12:34:00 -- 自行捕获报错异常时,有没有办法捕获是什么自定义函数触发? 目前用官方推荐的方法自行捕获异常 ①BeforeShowErrorMessage: Functions.Execute("LogText",e.ex) ②内部函数: Dim v = Args(0) Dim msg As String If Typeof v Is Exception Then \'如果是Exception的异常类型,则递归获取所有的异常堆栈 Do While v IsNot Nothing msg &= v.Message & vbcrlf & v.StackTrace & vbcrlf v = v.InnerException Loop Else \'其它情况只能传入错误的文本内容 msg = v End If Output.Logs("AppLogging").Add(Format( Date.Now,"yyyy-MM-dd HH:mm:ss.ffff") & vbCrLf & msg & vbCrLf ) Output.Logs("AppLogging").Save(ProjectPath & "Mmsglog.txt",True) \'日志位于当前项目目录里 Output.Logs("AppLogging").Clear ③我做的是bs开发,所以后端全部都是动态的内部函数,现在出现报错,不知道是什么函数出的错误 有没有什么好的方法,能显示触发报错的函数名就足够了,我就能定位函数去排查问题 [此贴子已经被作者于2020/4/13 12:34:12编辑过]
|
-- 作者:浙江仔 -- 发布时间:2020/4/13 12:44:00 -- 我也有这个需求,目前我是把函数执行建立日志,根据报错时间和函数执行时间来排查哪个函数有问题 |
-- 作者:chen37280600 -- 发布时间:2020/4/13 12:54:00 -- 回复:(浙江仔)我也有这个需求,目前我是把函数执行... 我正准备像你这样做,但是回头一想,感觉这不是正路,应该根治一下 |
-- 作者:chen37280600 -- 发布时间:2020/4/13 12:59:00 -- 找了一下相关属性手册,好像没找到想要的 |
-- 作者:有点蓝 -- 发布时间:2020/4/13 13:43:00 -- 这个需要foxtable内部处理。已反馈 |
-- 作者:狐狸爸爸 -- 发布时间:2020/4/17 15:45:00 -- BeforeShowErrorMessage 在Foxtable捕获错误并即将显示错误信息前执行。 e参数属性: Event: 字符型,返回发生错误的事件名称或函数名称 Message1: 字符型,返回简明错误信息 Message2: 字符型,返回详细错误信息 Cancel: 逻辑型,设为True将禁止系统显示错误信息。 ex: System.Exception类型,返回发生的错误,一般用户不需要使用此参数。 提示: 最好不要将Cancel参数设置为True,否则发生错误也不会提示,无法及时发现和纠正错误。 |
-- 作者:浙江仔 -- 发布时间:2020/4/17 16:27:00 -- 还真有这个功能,会提示自定义函数名称 |
-- 作者:chen37280600 -- 发布时间:2020/5/3 12:56:00 -- 总结改成这样,好用 ①BeforeShowErrorMessage: If User.Type <> UserTypeEnum.Developer Then Functions.Execute("LogText",e) e.Cancel = True End If ②内部函数: \'通过 Functions.Execute("LogText","你的错误信息")使用 Dim e As Object = Args(0) Dim msg As String If e.Gettype().ToString() ="Foxtable.ShowErrorMessageEventArgs" Then msg &= "报错定位:" & e.Event & vbcrlf Dim v As Object = e.ex If Typeof v Is Exception Then \'如果是Exception的异常类型,则递归获取所有的异常堆栈 Do While v IsNot Nothing msg &= v.Message & vbcrlf & v.StackTrace & vbcrlf v = v.InnerException Loop End If Else \'其它情况只能传入错误的文本内容 msg = e End If Output.Logs("AppLogging").Add(Format( Date.Now,"yyyy-MM-dd HH:mm:ss.ffff") & vbCrLf & msg & vbCrLf ) Output.Logs("AppLogging").Save(ProjectPath & "ErrorLog.txt",True) \'日志位于当前项目目录里 Output.Logs("AppLogging").Clear ③效果: [此贴子已经被作者于2020/5/4 22:35:06编辑过]
|