Log4Net多个Appenders,多个表存在配置问题



我有两个不同的表,我也在记录信息。我正在为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>

最新更新