如何为每个附加程序定义不同的记录器级别

How to define different logger levels per appenders

我正在尝试定义 2 个独立的 appender 以登录到 2 个文件。我定义 "DebugAppender" 的 DEBUG 级别,然后是 "RelevantAppender" 我为 "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>  

您的问题是,您在 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 个不同的附加程序。 DebugAppender 的级别由 <root> 定义。两个相关的附加程序将两者写入具有不同日志级别(阈值)的同一文件。包括锁定模型 <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 很重要。否则,您调用的第一个 appender 将锁定文件,而第二个 appender 将无法在其中写入 (Can Log4net have multiple appenders write to the same file?)。在 <logger> 中,您只需定义两个不同的附加程序,而没有定义日志级别。这样它将从 appender 设置中获取级别。

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

希望对您有所帮助