0

我正在使用 log4net 的 adonet appender 进行数据库调试。日志记录级别设置为错误。数据库日志记录是为运行在不同服务器上的两个应用程序配置的,这些应用程序写入 Oracle 数据库上的同一个表。表的列是 loginId、level。我面临的问题是:

  1. 即使日志级别设置为错误,表中也显示了一些信息级别语句,并且相应的级别列显示为错误。

  2. 在某些语句之间,显示的登录 ID 与运行应用程序的实际用户的登录 ID 不同。

  3. 那么,如何在不同的服务器上配置 log4net 以自主运行。

编辑:我只有在运行应用程序的多个实例时才会遇到这些问题,否则 log4net 日志记录很好。

场景:我在 2 个具有不同登录 ID 的浏览器中浏览了应用程序的发布版本,并在每个浏览器中经历了不同的流程。结果是登录ID变得混乱​​。我从代码中的用户会话中获取登录 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。

4

1 回答 1

0

我开始将此作为评论发布,但我意识到虽然我没有详细信息需要给你一个具体的答案,但我可以为你指出正确的方向。

问题 1:如果您在数据库中获取的语句是 info 语句,但被标记为错误语句,则这是您的代码中的问题。你必须告诉 log4net 日志语句是什么级别。您可以说“Hello World”语句是一个致命错误。听起来您的程序正在向日志发送您希望标记为信息消息的消息,但它们被标记为错误语句。查看这些语句发送到日志文件的位置,您应该会看到一条log.ERROR语句。将其更改为log.INFO,您应该一切顺利。

问题 2:登录 ID 应该显示谁执行了日志语句。这意味着如果您在另一个帐户下执行某些操作(以获得权限)或者如果您使用服务帐户,它将记录该用户而不是单击鼠标的人。如果您向我们展示您如何记录用户信息,我可以更具体地说明如何解决此问题。

问题3:我不确定你的意思。Log4net 的行为确实是自主的。您甚至可以毫无问题地在多台服务器上使用相同的配置,如果这是您所暗示的。

如果您想要更完整的答案,更具体地解决您的问题,请发布 log4net 配置文件和相关代码(您记录 INFO 语句的位置以及记录用户 ID 的方法将是一个好的开始) .

于 2011-07-10T15:43:28.090 回答