Log4Net多个Appender,多个表有配置问题

时间:2014-11-11 18:43:27

标签: logging log4net common.logging

我有两个不同的表,我也记录了信息。我正在使用针对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 _auditer记录器写入审计表...

但问题出在这里......按照我的方式进行配置,审计表也写入了LOG表,这是我不想要的。现在,如果我摆脱log4net配置中的根节点,那么我只有命名的记录器一切正常,因为_logger日志写入日志表,_auditer写入审计表,但_default日志没有&#39;写给任何人......所以我在这里错过了什么?

1 个答案:

答案 0 :(得分:3)

您应该设置additivity = false以防止审核记录器继承根记录器的配置。

<logger name="Audit" additivity="false">
   ...
</logger>