Database log4net adonet追加器

Database log4net adonet追加器,database,log4net,error-logging,adonetappender,Database,Log4net,Error Logging,Adonetappender,我正在使用log4net的adonet appender进行数据库调试。日志记录级别设置为错误。为运行在不同服务器上的两个应用程序配置了数据库日志记录,这两个应用程序在Oracle数据库上写入同一个表。表的列为loginId,level。我面临的问题是: 即使日志级别设置为error,表中也显示了一些info-level语句,并且对应的level列显示为error 在某些语句之间,显示的登录Id与运行应用程序的实际用户的登录Id不同 那么,如何在不同的服务器上配置log4net以实现自主行为呢

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

即使日志级别设置为error,表中也显示了一些info-level语句,并且对应的level列显示为error

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

那么,如何在不同的服务器上配置log4net以实现自主行为呢

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

场景:我在两个具有不同登录ID的浏览器中浏览了应用程序的发布版本,并在每个浏览器中经历了不同的流程。结果是登录id变得混乱。我正在代码中从用户会话获取登录id值,然后将其存储到log4net.GlobalContext.Properties中

经过一些研究,我发现log4net.GlobalContext.Properties有一些替代品,可以在中找到。我认为应该使用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,您能告诉我如何将其用于登录标识吗?

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

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

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

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


如果您希望得到更完整、更具体的问题答案,请将log4net配置文件和相关代码张贴在您记录信息语句的位置,以及记录用户ID的方法将是一个良好的开端。

您所说的自主行为到底指的是什么?