【问题标题】:Log4Net properties is overwriting for simultaneous requestsLog4Net 属性正在覆盖同时请求
【发布时间】:2013-05-29 16:26:04
【问题描述】:

我正在尝试分别为每个用户编写日志文件

为此,我将文件名的属性设置为当前用户 ID,并像这样配置 log4net

log4net.GlobalContext.Properties["userid"] = userId; 
log4net.Config.XmlConfigurator.Configure();

这一切都很好,它为每个用户创建新的日志文件,并将用户的所有活动记录在各自的文件中。

问题从多个用户同时请求服务开始,然后开始将一个用户的部分日志放到另一个用户文件中,因此所有日志都在同时的用户文件中混在一起。

我得到的原因是全局设置在 user1 正在进行时被 user2 覆盖,因此 user1 开始将日志写入 user2 的文件,因为设置现在被覆盖。

我也尝试了log4net.LogicalThreadContextlog4net.ThreadContext,但它们也没有用。

有什么解决方法吗?

【问题讨论】:

标签: asp.net-mvc-3 logging log4net


【解决方案1】:

Log4net 只有一种配置。因此,您无法通过为每个用户获取不同的配置来解决此问题。但是,您可以记录用户名,或创建以您的用户命名的记录器。然后,您可以为每个用户制作不同的附加程序,并将输出记录到不同的文件中。而且您只需拨打log4net.Config.XmlConfigurator.Configure(); 一次。

string userid = (...) ;
ILog log = LogManager.GetLogger(userId);


<log4net>
<appender name="<userid1>" type="log4net.Appender.SitecoreLogFileAppender, Sitecore.Logging">
  ....
</appender>
<appender name="<userid2>" type="log4net.Appender.SitecoreLogFileAppender, Sitecore.Logging">
  ....
</appender>
<logger name="<userid1>">
  <level value="ALL"/>
  <appender-ref ref="<userid1>"/>          
</logger>
<logger name="<userid2>">
  <level value="ALL"/>
  <appender-ref ref="<userid2>"/>          
</logger>
....

【讨论】:

    猜你喜欢
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多