我正在尝试单独为每个用户编写日志文件
为此,我将文件名的属性设置为当前用户ID并像这样配置log4net
log4net.GlobalContext.Properties["userid"] = userId;
log4net.Config.XmlConfigurator.Configure();
这一切都运行良好,它为每个用户创建新的日志文件,并将用户的所有活动记录在各自的文件中。
问题在多个用户同时请求服务时启动,然后开始将一个用户的部分日志放到另一个用户文件中,因此所有日志都会在同时用户文件中混淆。
我得到的结果是,当user1正在进行时,user2会覆盖全局设置,因此user1开始将日志写入user2的文件,因为现在已覆盖设置。
我也尝试了log4net.LogicalThreadContext
和log4net.ThreadContext
,但它们也没有用。
有没有解决方法呢?
答案 0 :(得分:0)
Log4net只有一个配置。因此,您无法通过为每个用户获取不同的配置来解决此问题。但是,您可以记录用户名,或创建以用户命名的记录器。然后,您可以为每个用户创建不同的appender,并将输出记录到不同的文件。而且您只需拨打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>
....