我将log4Net ADONetAppender设置为一个名为log的表。log4net%属性在设置后变为空
在Global.asax.cs文件的Application_Start()上配置log4net。
表和它的刀片是典型
INSERT INTO log ([PCDate],[Thread],[Level],[Logger],[Message],[Exception])
VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)
所有所不同的是,我已经把我的记录器是当前登录到系统中的应用程序用户。
这在.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当前文件更何况,这是无法形成规模,能。
何处/为什么属性值设置为null后?
表中的记录是这样的
伟大的一点。但是,只有在login.aspx页面上单击登录按钮后,才会设置该用户名。我还不知道application_beginRequest的价值。或者我需要通过将它保存在会话中并在BeginREquest中检查它来检查它吗? – devsahem
斯图尔特,我用了GlobalContext。记录器的值持续不为空:) :)但是,我不确定是否全局跨所有用户? [链接](https://logging.apache.org/log4net/release/manual/contexts.html)该链接描述了跨AppDomain(我不明白)如何使用globalcontext。这是否意味着它会影响其他用户,并且每个最近记录的用户都会覆盖此值?我需要另一台机器来测试它。 – devsahem
是的,GlobalContext将只保存一个值,即最后一个登录用户的值。您之前在会话中保留用户名并使用它填充ThreadContext的想法仍然有效。 – stuartd