2011-07-10 99 views
0

我使用log4net的adonet appender进行数据库调试。记录级别设置为错误。数据库日志记录配置在不同的服务器上运行的应用程序,以书面方式相同表上表中的甲骨文data​​base.The柱登录ID,我面对level.The问题是:log4net adonet appender

  1. 即使日志记录级别设置为错误,表中还显示了一些信息级别的声明,并且相应级别的列被显示为错误。

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

  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。

+0

你的意思是“自主行为”是什么意思? –

回答

0

我开始张贴此作为一个评论,但我意识到,虽然我没有我需要给你一个明确的答案的细节,我可以为你指明正确的方向。

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

问题2:登录ID应该显示谁执行的日志语句。这意味着如果你在其他帐户下运行的东西(的权限),或者如果你使用一个服务帐户,它会记录用户,而不是点击鼠标的人。如果您向我们展示如何记录用户信息,我可以更具体地了解如何解决此问题。

第3期:我不确定你在这里是什么意思。 Log4net的行为是自主的。您甚至可以在多台服务器上使用相同的配置而不会出现问题,如果这是您所指的。

如果您希望针对您的问题更具体的更完整的答案,请发布log4net配置文件和相关代码(您记录INFO语句的位置以及记录用户ID的方法一个好的开始)。