我已将log4Net ADONetAppender设置为名为log的表。
在Global.asax.cs文件的Application_Start()上配置log4net。
表格及其插页是典型的
INSERT INTO log ([PCDate],[Thread],[Level],[Logger],[Message],[Exception])
VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)
所有不同之处在于我已将Logger设置为当前登录系统的应用程序用户。
这在.config文件中。
<parameter>
<parameterName value="@logger"/>
<dbType value="String"/>
<size value="255"/>
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{userName}"/>
</layout>
</parameter>
我在负责处理它的类中插入,更新或删除用户数据记录之前进行日志记录。
logger.Info(strquery);
记录器的消息是插入/更新或删除查询。 记录器被设置为当前应用程序记录的用户,例如鲍勃,灰等 登录和调试验证它是否设置为该值。
log4net.ThreadContext.Properties["userName"] = userName;
我可以选择在最终进行插入/添加/删除的每个asp中加上上述语句,但是我们在查看12个当前文件时很麻烦,更不用说这是不可扩展的了。
where / why为什么在??之后将属性值设置为null 表记录看起来像这样
答案 0 :(得分:0)
这种情况正在发生,因为ThreadContext
在当前线程上保留了用户名,正如您从日志中看到的那样,线程在调用之间发生了变化:当您在登录时设置值时,它就是对当前请求有效,但下一个请求获得一个新线程,因此新ThreadContext
并且该值消失。
如果将用户名存储在会话中,则可以在Global.asax.cs文件的Application_AcquireRequestState
事件中设置ThreadContext属性。然后它对整个请求都有效。