Foxtable(狐表)用户栏目专家坐堂 → 自行捕获报错异常时,有没有办法捕获是什么自定义函数触发?


  共有3122人关注过本帖树形打印复制链接

主题:自行捕获报错异常时,有没有办法捕获是什么自定义函数触发?

帅哥哟,离线,有人找我吗?
chen37280600
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1276 积分:7927 威望:0 精华:4 注册:2017/12/31 14:53:00
自行捕获报错异常时,有没有办法捕获是什么自定义函数触发?  发帖心情 Post By: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编辑过]

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1276 积分:7927 威望:0 精华:4 注册:2017/12/31 14:53:00
回复:(浙江仔)我也有这个需求,目前我是把函数执行...  发帖心情 Post By:2020/4/13 12:54:00 [显示全部帖子]

我正准备像你这样做,但是回头一想,感觉这不是正路,应该根治一下

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1276 积分:7927 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By:2020/4/13 12:59:00 [显示全部帖子]

找了一下相关属性手册,好像没找到想要的

 回到顶部
帅哥哟,离线,有人找我吗?
chen37280600
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:六尾狐 帖子:1276 积分:7927 威望:0 精华:4 注册:2017/12/31 14:53:00
  发帖心情 Post By: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编辑过]

 回到顶部