- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 Log4Net 配置,该配置将记录所有未处理的异常。我需要根据用户将某些属性添加到每个日志条目中。我已在 Application_Error 事件中按以下方式成功设置了此设置。这是我完整的 global.asax
Imports log4net
Imports log4net.Config
Public Class Global_asax
Inherits System.Web.HttpApplication
'Define a static logger variable
Private Shared log As ILog = LogManager.GetLogger(GetType(Global_asax))
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
' Fires when the application is started
ConfigureLogging()
End Sub
Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
' Code that runs when an unhandled error occurs
Dim ex As Exception = Server.GetLastError()
ThreadContext.Properties("user") = User.Identity.Name
ThreadContext.Properties("appbrowser") = String.Concat(Request.Browser.Browser, " ", Request.Browser.Version)
If TypeOf ex Is HttpUnhandledException AndAlso ex.InnerException IsNot Nothing Then
ex = ex.InnerException
End If
log.Error(ex)
ThreadContext.Properties.Clear()
End Sub
Private Sub ConfigureLogging()
Dim logFile As String = Server.MapPath("~/Log4Net.config")
log4net.Config.XmlConfigurator.ConfigureAndWatch(New System.IO.FileInfo(logFile))
log4net.GlobalContext.Properties("appname") = System.Reflection.Assembly.GetExecutingAssembly.GetName.Name
End Sub
End Class
这似乎工作正常。不过,我有一些问题无法回答。
我通过线程上下文添加用户特定属性的方式正确吗?即使在负载下,这也会始终记录正确的信息吗?什么时候会使用threadlogiccontext?有更好的方法吗?
谢谢
最佳答案
将请求特定的值加载到 ThreadContext
中是不安全的像那样。原因是 ASP.NET 共享线程来服务请求。事实上,它经常这样做。
您可以使用 LogicalThreadContext
,但是它只是将值存储在用于远程处理的调用上下文中。
据我所知,没有 HttpContext 特定的上下文存储,因此您可以做的是分配一个“值提供程序”实例作为您的线程上下文,并且在运行时它将调用此类上的 .ToString() 来获取值。
public class HttpContextUserProvider
{
public override string ToString()
{
return HttpContext.Current.User.Identity.Name;
}
}
虽然不太理想,但确实有效。
关于asp.net - Log4Net、ThreadContext 和 Global.asax,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1066062/
我正在尝试从 log4j-1.x 升级到 log4j-2.3 并在运行时出现以下错误。我缺少什么吗? public void debug(String msg) { appendContext
来自这个答案https://stackoverflow.com/a/25125159/4367326我有 routingAppender 工作,但我想为程序中的每个线程设置 ThreadContext
我有以下控制台附加程序; 问题是我在这里使用的模式输出一个空的 ThreadContext ({})。我不想使用特定的键名称(例如 %X{username}),因为系统非常
我们使用的是 Log4net 的 ThreadContext.Stacks,它运行良好。如果有多个 ThreadContext.Stacks["key"].Push(...),我的问题就来了。 使用简
我已经设置了 ThreadContext.Properties 并且需要在我的代码生命周期中更新它的值。过去我使用过 log4j MDC 并且不得不:MDC.remove(跟踪); 然后通过以下方式添
我的 AsP.NET 站点上运行着 log4net。我可以将消息记录到我的数据库表中,但它没有记录 ThreadContext 属性。例如: ThreadContext.Properties["Url
我正在尝试这个: Type ThreadContextType = typeof(Application).GetNestedType("ThreadContext", System.Reflecti
我一直在做一个使用 log4j2 的项目,在这个项目中我使用了 ThreadContext。现在我回到使用 log4j (1),它不提供 ThreadContext。 ThreadContext 有什
我有以下 Log4J2 配置 XML:
我不明白官方文档中的解释: 逻辑线程可以从一个托管线程跳转到另一个托管线程。 ThreadContext 和 ThreadLogicalContext 有什么区别?有人可以详细说明一下吗? 谢谢。 最
2014 年 11 月 18 日更新 - 在浏览 log4net 源存储库时,我发现 LogicalThreadContext 的实现在 2011 年 11 月被修改为它使用 CallContext.
我正在开发一个 Log4Net 配置,该配置将记录所有未处理的异常。我需要根据用户将某些属性添加到每个日志条目中。我已在 Application_Error 事件中按以下方式成功设置了此设置。这是我完
我只是想知道threadContext.put和MDC.put之间的区别。因为,我相信两者都在做相同的操作。 最佳答案 Log4j 2 continues with the idea of the M
看起来 Class.getResource() 使用 Class 类加载器并忽略 Thread 上下文类加载器,这不是我想要的。关于如何解决这个问题有什么建议吗? 最佳答案 只需获取当前线程类加载器并
有没有人试过同时堆叠context和使用Tasks? 我正在尝试这样的事情: using (log4net.ThreadContext.Stacks["contextLog"].Push("Savin
我想在我的 wcf 服务中使用以下内容在日志消息中记录用户: log4net.ThreadContext.Properties["user"] = this.currentUser.LoginName
在 Web 服务应用程序中,我使用静态方法设置 log4j ThreadContext 变量以进行日志记录,如下所示, public static void setLogParams(String c
总结一下这个问题,我在一个包中有一个公共(public)类,它在整个项目中使用。该类是一个 Aspect 类,它将值放入 ThreadContext(log4j2) 中,以便我们的日志记录将相应的 s
当停止运行我们基于 Wicket-6.19 的网站的 Tomcat 时,大量警告淹没了我们的日志文件: INFO: Stopping service Catalina Jul 06, 2015 8:1
我在一些地方读到 log4net threadContext 在 asp.net 场景中使用不安全。以下是几篇文章: Log4Net, ThreadContext, and Global.asax h
我是一名优秀的程序员,十分优秀!