我正在使用log4net的adonet appender进行数据库调试。记录级别设置为错误。数据库日志记录是为在Oracle数据库上写入同一个表的不同服务器上运行的两个应用程序配置的。表的列是loginId,level。我面临的问题是:
即使将日志记录级别设置为错误,表中也会显示一些信息级别语句,并且相应级别列显示为错误。
在某些语句之间,登录ID显示的不同于运行该应用程序的实际用户的登录ID。
那么,如何在不同服务器上配置log4net以自动运行。
编辑:我只在运行多个应用程序实例时遇到这些问题,否则log4net日志记录正常。
场景:我在具有不同登录ID的2个浏览器中浏览了该应用程序的已发布版本,并在每个浏览器中浏览了不同的流程。结果是登录ID变得混乱。我从我的代码中的User session获取登录ID值,然后存储到log4net.GlobalContext.Properties。
经过一些研究,我发现log4net.GlobalContext.Properties
有一些替代品可以在http://logging.apache.org/log4net/release/manual/contexts.html中找到。我认为应该使用ThreadContext.Properties
而不是全局。
我认为我因为存储到log4net.GlobalContext.Properties
而面临问题。
问题1:我检查了代码,语句是logger.info
。但是在数据库表中,它是以错误级别记录的。
问题2:登录ID的代码:
user = (User)Session["User"];
log4net.GlobalContext.Properties["LOGINID"] = user.Login;
web.config中的。
如果您认为可以使用ThreadContext.Properties而不是global.properties,您可以告诉我如何将它用于login_id。
答案 0 :(得分:0)
我开始将此作为评论发布,但我意识到虽然我没有详细信息,但我需要给你一个具体的答案,我可以指出你正确的方向。
问题1 :如果您在数据库中收到的语句是info语句但标记为错误语句,则代码中存在问题。你必须告诉log4net日志语句是什么级别。您可以说“Hello World”语句是致命错误。听起来您的程序正在将要标记为信息消息的消息发送到日志,但它们被标记为错误语句。查看这些语句发送到日志文件的位置,您应该看到log.ERROR
语句。将其更改为log.INFO
,您应该好好去。
问题2 :登录ID应显示执行日志语句的人员。这意味着如果您在另一个帐户(用于权限)下执行某些操作或使用服务帐户,它将记录该用户而不是单击鼠标的人。如果您向我们展示如何记录用户信息,我可以更具体地说明如何解决这个问题。
第3期:我不确定你的意思。 Log4net确实表现得很自主。您甚至可以在多个服务器上使用相同的配置而不会出现问题,如果这是您所暗示的。
如果您想要更完整的答案更具体针对您的问题,请发布log4net配置文件和相关代码(您记录INFO语句的位置以及记录用户ID的方法将是好的开始)。