log4net多个记录器 - 属性

时间:2017-10-24 09:08:44

标签: c# logging log4net

log4net v.2.0.8

我在使用log4net进行多次日志记录时遇到了一些问题。我正在开发一个适用于n个设备的应用程序,我希望每个设备都有一个日志文件。

log4net.config

<log4net>

<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender">
  <file type="log4net.Util.PatternString" value="%envFolderPath{LocalApplicationData}/Foo/Device%property{DeviceID}/log.txt"/>
  <appendToFile value="true"/>
  <maxSizeRollBackups value="10"/>
  <maximumFileSize value="10MB"/>
  <layout type="log4net.Layout.PatternLayout">
    <param name="Header" value="BEGIN LOGGING AT %date *** %property *** %newline" type="log4net.Util.PatternString" />
    <param name="Footer" value="END LOGGING AT %date *** %property *** %newline" type="log4net.Util.PatternString" />
    <param name="ConversionPattern" value="%date [%thread] %-5level %-5class{1}  %-5method(%line) %message %newline" />
  </layout>
  <filter type="log4net.Filter.PropertyFilter">
     <key value="Version" />
     <stringToMatch value="1" />
  </filter>
</appender>

<root>
  <level value="ALL" />
  <appender-ref ref="LogFileAppender" />
</root>

这是代码

  public DeviceClass(string deviceID)
    {
        InitializeComponent();

        GlobalContext.Properties["DeviceID"] = deviceID;
        logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        logger.Debug("Hello world");

问题是,如果我有两个设备,我只得到第一个包含所有设备消息的日志文件。

1 个答案:

答案 0 :(得分:0)

我不是Log4Net专家,但我相信日志管理器会在第一次为给定类型/名称调用GetLogger时初始化记录器及其所有appender(封面下的类型已翻译)到字符串名称)。在这种情况下,它不会重新初始化每个设备。我的建议是尝试使用以下内容创建类型名称和设备ID的组合:

logger = LogManager.GetLogger($"{System.Reflection.MethodBase.GetCurrentMethod().DeclaringType.FullName}{deviceId}");