如何为每个appenders

时间:2016-09-15 17:55:22

标签: log4net log4net-configuration log4net-appender

我正在尝试定义2个独立的appender来登录到2个文件。我定义 “DebugAppender”的DEBUG级别,然后是“RelevantAppender”的DEBUG级别我为“Security”和“ServerStats”记录器定义了不同的级别。

问题是这些记录器定义会覆盖我的“DebugAppender”级别,现在它不处于DEBUG模式(所有记录器)。

如何使其按预期工作?

<log4net>
<appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
    <file value="plastic.debug.log.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value=".yyyyMMdd" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %thread %property{TransactionID} %property{ClientMachine} %-5level %logger - %message%newline" />
    </layout>
</appender>

<appender name="RelevantAppender" type="log4net.Appender.RollingFileAppender">
    <file value="plastic.relevant.log.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value=".yyyyMMdd" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %property{ClientMachine} %-5level %logger - %message%newline" />
    </layout>`enter code here`       
</appender>


<logger name="Security">
    <level value="ERROR" />
    <appender-ref ref="RelevantAppender" />
</logger>

<logger name="ServerStats">
    <level value="INFO" />
    <appender-ref ref="RelevantAppender" />
</logger>

  <root>
    <level value="DEBUG" />
    <appender-ref ref="DebugAppender" />
  </root>  

1 个答案:

答案 0 :(得分:2)

你的问题是,你在Logger中做出的定义超过了以下所有级别。所以这就是我的解决方案:

<log4net>
<appender name="DebugAppender" type="log4net.Appender.RollingFileAppender">
  <file value="plastic.debug.log.txt" />
  <!--...-->
</appender>

<appender name="Security_RelevantAppender" type="log4net.Appender.RollingFileAppender">
  <threshold value="ERROR" />
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <file value="plastic.relevant.log.txt" />
  <!--...-->
</appender>

<appender name="Serverstat_RelevantAppender" type="log4net.Appender.RollingFileAppender">
  <threshold value="INFO" />
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <!--...-->
</appender>


<logger name="Security">
  <appender-ref ref="Security_RelevantAppender" />
</logger>

<logger name="ServerStats">
  <appender-ref ref="Serverstat_RelevantAppender" />
</logger>

<root>
  <level value="DEBUG" />
  <appender-ref ref="DebugAppender" />
</root>
</log4net>

定义3个不同的appender。 DebugAppender的级别由<root>定义。两个相关的appender将两个写入具有不同日志级别(阈值)的同一文件。重要的是,您要包含锁定模型<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />。否则,您调用的第一个appender将锁定该文件,而第二个不能写入该文件(Can Log4net have multiple appenders write to the same file?)。在<logger>中,您只需定义两个不同的appender而不是loglevel。这样它将从appender设置中获取级别。

当您这样做时,任何记录器中所有类型为debug +的事件都将写入plastic.debug.log.txt。仅向plastic.relevant.log.txt发送事件错误+来自security-logger和info +来自serverstat-logger。

希望这有帮助