我有两个不同的表,我也在记录信息。我正在为log4net使用Common.Logging库包装器,并且几乎已经正确配置了一些东西,但我遇到了一个问题,在日志表中记录了太多。。。我知道,违背直觉。。。我有两张桌子
日志表审核表
以下是我的配置
<log4net>
<!-- This will force both loggers to write to both tables-->
<root>
<level value="INFO" />
<appender-ref ref="LogAppender" />
<!--<appender-ref name="Audit" ref="AuditAppender" />-->
</root>
<logger name="Log">
<level value="INFO" />
<appender-ref ref="LogAppender" />
</logger>
<logger name="Audit">
<level value="INFO" />
<appender-ref ref="AuditAppender" />
</logger>
<!--SQL LOG TABLE Appender-->
<appender name="LogAppender" type="log4net.Appender.AdoNetAppender"> .... This writes to Log Table correctly
</appender>
<appender name="AuditAppender" type="log4net.Appender.AdoNetAppender"> .... This logs to the Audit Table correctly
</appender>
</log4net>
调用代码:我们有三种方法来创建记录器
readonly ILog _default = LogManager.GetCurrentClassLogger();
readonly ILog _logger = LogManager.GetLogger("Log");
readonly ILog _auditer = LogManager.GetLogger("Audit");
现在,如果我把三个人背靠背地叫
_default.Info("Default Logger");
_logger.Info("Test get products logging");
_auditer.Info("Test get products audit");
我正在尝试获取它,以便_default或_logger都写入日志表,实际上它们确实这样做了AND审核程序记录器写入审核表(_A)。。。
但问题是。。。按照我的配置方式,审计表也会写入LOG表,这是我不想要的。现在,如果我去掉了log4net配置中的根节点,所以我只有命名的记录器,那么一切都很好,因为_logger日志会写入日志表,_auditer会写入审计表,但_default日志不会写入任何。。。那么我在这里错过了什么???
您应该将additivity设置为false,以防止您的审计记录器继承根记录器的配置。
<logger name="Audit" additivity="false">
...
</logger>