以文本方式查看主题 - Foxtable(狐表) (http://foxtable.com/bbs/index.asp) -- 专家坐堂 (http://foxtable.com/bbs/list.asp?boardid=2) ---- [求助]抛异常问题 (http://foxtable.com/bbs/dispbbs.asp?boardid=2&id=178611) |
-- 作者:ajie5211 -- 发布时间:2022/7/12 11:10:00 -- [求助]抛异常问题 网页服务端中,希望记录服务器的异常信息,同时因为是服务端,所以不要显示异常窗口,还要及时给前端一个服务端异常提示,不要让前端直接等待死机。 如果用BeforeShowErrorMessage事件,这时不知道怎么给前端回写服务端异常,如果用 try
Catch ex As Exception Functions.Execute("错误日志", ex) End Try 这时的问题是,BeforeShowErrorMessage事件不起作用,只能靠Functions.Execute("错误日志", ex)这个内部函数,但是这样写的异常日志没有“Event: 字符型,返回发生错误的事件名称,如果错误发生在自定义函数中,则返回函数名”,造成错误无法排查,不知道有啥办法能处理。 错误日志内部函数如下: Dim v As Exception = args(0) |
-- 作者:有点蓝 -- 发布时间:2022/7/12 11:29:00 -- 加个参数,把函数名放进去 try
Catch ex As Exception Functions.Execute("错误日志", ex ,"xx函数") End Try ------------ msg = args(1) & ":" & msg |
-- 作者:ajie5211 -- 发布时间:2022/7/12 11:34:00 -- 这个还真不是好方案,我现在把这个try直接放在了HttpRequest事件第一道里,try里面去写的各个内部函数生成网页,里面有些还会用表事件啥的,如果按你这整法,哪每个内部函数,每个事件哪里都要去写一下try抛异常了,会非常麻烦的。 |
-- 作者:有点蓝 -- 发布时间:2022/7/12 11:41:00 -- 这个没有办法。 |
-- 作者:ajie5211 -- 发布时间:2022/7/12 14:13:00 -- 反复调试,终于解决这个问题了,定义一个全局变量,Public _httpe As RequestEventArgs 在HttpRequest事件里,一开始就把有e参数传给_httpe,即_httpe=e 在BeforeShowErrorMessage事件里,e.Cancel = true 前面把错误信息写入日志,发送管理员邮件,并加入 _httpe.WriteString("服务端异步异常,请联系管理员!") 这时就可以直接回应前端了。 |
-- 作者:有点蓝 -- 发布时间:2022/7/12 14:23:00 -- 不合理,HttpRequest事件是所有客户端共用的。这样可能会导致A用户出错,然后把错误发给B用户了 |
-- 作者:ajie5211 -- 发布时间:2022/7/12 14:51:00 -- 用try也不好啊,先不说代码变复杂这些事,因为是内部函数套内部函数,要想错误显示完整,就需要每个事件,每个内部函数都try一下,这样就会发生,一但有报错,就一层一层的try回来,系统效率是不是低很多了? 按这算法,这事没个好方案。 |