假设一个应用程序中有多个用户在线。由于某种原因,4个用户获得了例外。由于我们在Global.asax文件中实现了全局异常处理,因此我们向所有用户显示自定义错误页面并使用以下代码记录错误:
var currentException = Server.GetLastError();
logger.LogDetails(currentException); // some logging code
Server.ClearError();
在这种情况下,此Server.GetLastError()将返回什么? 另外,我需要记录异常。所以把它想象成一样,我想根据用户的关键异常和异常细节作为描述来记录异常。因此对于用户1,将存在类似User = U1,ExceptionDescription =“Divide By zero”的日志条目。
正如史蒂夫在评论中建议的那样,我可以使用HTTPContext获取当前用户,但仍然无法获得会话中发生的异常。我怎样才能做到这一点?
答案 0 :(得分:1)
var currentException = Server.GetLastError();
var user = HttpContext.Current.User;
logger.LogDetails(currentException, user); // some logging code
Server.ClearError();
您可以在记录之前获取用户,这将是错误的当前用户。
答案 1 :(得分:1)
您似乎担心GetLastError会返回上次发生的任何错误而不管用户是什么,如果有四个用户收到错误,则可能会出现串扰并且他们可能会看到彼此的错误(或者日志记录代码可能会记录错误的用户名错误的错误)。事实并非如此。
GetLastError是特定于会话的,或者更确切地说,是特定于线程的。它将仅返回从当前线程接收响应的用户触发的错误。
GetLastError函数
检索调用线程的最后错误代码值。最后一个错误代码是基于每个线程维护的。多个线程不会覆盖彼此的最后一个错误代码。
所以,只要使用史蒂夫的回答,你应该好好去。