如何为每个附加程序定义不同的记录器级别
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.txt
。 plastic.relevant.log.txt
仅写入来自 security-logger 的事件 error+ 和来自 serverstat-logger 的 info+。
希望对您有所帮助
我正在尝试定义 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.txt
。 plastic.relevant.log.txt
仅写入来自 security-logger 的事件 error+ 和来自 serverstat-logger 的 info+。
希望对您有所帮助