我正在使用 log4net 记录一个项目。
我想登录 3 个不同的文件:请求、响应和错误。
<log4net debug="true">
<!--To turn off an appender, simply set it's threshold value to "OFF"-->
<appender type="log4net.Appender.RollingFileAppender" name="RequestAppender">
<file value="requests.txt" />
<threshold value="INFO" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
</layout>
</appender>
<appender type="log4net.Appender.RollingFileAppender" name="ResponseAppender">
<file value="responses.txt" />
<threshold value="INFO" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
</layout>
</appender>
<appender type="log4net.Appender.RollingFileAppender" name="ErrorAppender">
<file value="errors.txt" />
<threshold value="ERROR" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<maxSizeRollBackups value="10" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%-5p %d %5rms %-22.22c{1} %-18.18M - %m%n" />
</layout>
</appender>
</log4net>
但是,我不知道如何在 .NET 端为每个记录器获取一个实例。 使用标准的 1 个 appender 配置,我过去常常遵循:
private static readonly log4net.ILog log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
但是这个没有指定appenderName,我也没有找到指定的方法。
有什么想法吗?
谢谢!
编辑: 我想我遗漏了一些东西,因为我的配置文件中没有定义。我不明白记录器和追加器之间的分离。
编辑#2: 我注意到了一些奇怪的事情。在多个 3 个记录器配置之前,我有一个 1 个记录器配置。现在,我写入 3 个记录器的内容写入了那个日志文件,尽管它不再在配置文件中。由于某种原因,它不会加载新的配置文件。我怎样才能强制它这样做?
最佳答案
要使用您想要的名称,您可以创建 3 个记录器:
private static readonly log4net.ILog logError = log4net.LogManager.GetLogger("ErrorAppender");
private static readonly log4net.ILog logResponse = log4net.LogManager.GetLogger("ResponseAppender");
private static readonly log4net.ILog logRequest = log4net.LogManager.GetLogger("RequestAppender");
记录日志消息时,您必须使用正确的记录器。您的附加程序配置为在单独的文件中处理每个记录器。
您当前代码的问题是:
System.Reflection.MethodBase.GetCurrentMethod().DeclaringType
因为您使用静态记录器,记录器名称可能无法正确形成。没有 System.Reflection.MethodBase.GetCurrentMethod()
,因为调用静态初始化时没有 GetCurrentMethod
。您可以将其更改为 typeof(..).Name
。但是,您需要重新配置 appender 以记录您的类名。
关于c# - 为每个 appender 创建不同的 log4net.ILog 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17917681/