Невозможно записать более 1 файла журнала в log4net в приложении Windows - PullRequest
0 голосов
/ 17 мая 2019

Я использую 7 модулей в своем приложении, которое работает в Windows Service.Я получаю динамические файлы журнала с помощью log4net. Это работает нормально.

Если я попытался использовать 2 файла конфигурации log4net для получения 2 файлов журнала одновременно.Файлы журналов создаются правильно в первый раз, когда я попытался запустить приложение во второй раз, только 1 файл журнала катится правильно.Другой файл пуст.

Мой первый log4net.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>
  <appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
  </appSettings>
  <!-- Log4net Logging Setup -->
  <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%date] - [%property{Name}] - [%-5level] -- [%message]%newline" />
      </layout>
    </appender>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file type="log4net.Util.PatternString" value="%property{LogName}%date{_dd_MM_yyyy}.log.log" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maximumFileSize value="2KB" />
      <maxSizeRollBackups value="5" />
      <staticLogFileName value="false" />
      <preserveLogFileNameExtension value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%date] - [%property{Name}] - [%-5level] -- [%message]%newline" />
      </layout>
      <filter type="log4net.Filter.LoggerMatchFilter">
        <loggerToMatch value="RollingFileAppender" />
      </filter>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="ConsoleAppender" />
      <appender-ref ref="RollingFileAppender" />    
    </root>
  </log4net>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
</configuration>

Мой второй log4net.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>
  <appSettings>
    <add key="log4net.Internal.Debug" value="true"/>
  </appSettings>
  <!-- Log4net Logging Setup -->
  <log4net>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%date] - [%property{Name}] - [%-5level] -- [%message]%newline" />
      </layout>
    </appender>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <filter type="log4net.Filter.LoggerMatchFilter">
        <loggerToMatch value="IotConnectivityAgent" />
        <acceptOnMatch value="true" />
    </filter>
      <file type="log4net.Util.PatternString" value="%property{LogName}%date{_dd_MM_yyyy}.log.log" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maximumFileSize value="2KB" />
      <maxSizeRollBackups value="5" />
      <staticLogFileName value="true" />
      <preserveLogFileNameExtension value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="[%date] - [%property{Name}] - [%-5level] -- [%message]%newline" />
      </layout>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="ConsoleAppender" />
      <appender-ref ref="RollingFileAppender" />
    </root>
  </log4net>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
  </startup>
</configuration>

В программном коде 1-й модуль:

 log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo("log4net.config"));
            log4net.GlobalContext.Properties["LogName"] = Path.GetFullPath(_config.GetValue(IOT_DefineMacros.XMLTAG_LOG_PATH)) + "\\" + _processName;

В программном коде 2-го модуля:

 log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo("log4net_IOT.config"));
log4net.GlobalContext.Properties["LogName"] = 
 Path.GetFullPath(_config.GetValue(IOT_DefineMacros.XMLTAG_LOG_PATH)) + "\\" + _processName;

Файл Assemly.cs для первого файла конфигурации log4net:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = @"log4net.config", Watch = true)]

Файл Assemly.cs для первого файла конфигурации log4net:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = @"log4net_IOT.config", Watch = true)]

Я хотел получить 2 файла журнала из этого решения.Это должно быть создано одновременно без каких-либо перерывов между файлом 2 log4net.

...