以文本方式查看主题

-  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开发,所以后端全部都是动态的内部函数,现在出现报错,不知道是什么函数出的错误

图片点击可在新窗口打开查看此主题相关图片如下:1.png
图片点击可在新窗口打开查看

有没有什么好的方法,能显示触发报错的函数名就足够了,我就能定位函数去排查问题

[此贴子已经被作者于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

③效果:

此主题相关图片如下:1.png
按此在新窗口浏览图片

[此贴子已经被作者于2020/5/4 22:35:06编辑过]