我正在尝试定义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>
答案 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。
希望这有帮助