Может ли Log4net иметь несколько приложений для записи в один и тот же файл? - PullRequest
17 голосов
/ 10 июня 2010

Я использую RollingFileAppender для записи некоторой информации в файл с ConversionPattern (в web.config), который выглядит следующим образом для заголовка каждого раздела журнала:

<conversionPattern value="%date - %property{userId} - %property{method}%newline--------------------------------%newline%message%newline%newline"/>

Я бы хотел записать детали под этим заголовком в виде маркеров. В настоящее время я пытаюсь использовать другой RollingFileAppender, который записывает в тот же файл простой конверсионный шаблон, состоящий всего из тире, например:

<conversionPattern value="- %message%newline"/>

Но эти сообщения не попадают в файл журнала. Я использую Log.Info () для заголовка и Log.Debug () для точек маркера и фильтрую каждого аппендера на соответствующих уровнях журнала. Возможно ли то, что я пытаюсь сделать? Или есть лучший способ получить заголовок и подробную информацию в файл журнала из log4net?

Ответы [ 2 ]

32 голосов
/ 26 января 2011

Да, у вас может быть два приложения log4net, которые добавляют (записывают) в один и тот же файл журнала.

Вам необходимо поместить следующую строку в каждом из ваших аппендеров:

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />

Это заставит log4net использовать минимальную модель блокировки, которая позволяет нескольким процессам записывать в один файл.

Вот пример XML, в котором два приложения добавляются в один и тот же файл журнала:

<log4net debug="false">
<appender name="RollingLogFileAppender1" type="log4net.Appender.RollingFileAppender">
  <!-- this configures a log for the application messages -->
  <file value="TestLog.log" />
  <appendToFile value="true" />
  <!-- next line uses a minimal locking model that allows multiple processes to write to the same file -->
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <!-- make the most recent log the highest numbered log -->
  <countDirection value="1" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-5level %date{MM-dd-yyyy HH:mm:ss.ff} [%property{NDC}] %message%newline [Thread: %thread] %c{1} Method:%method(%file{1}, Line:%line) %newline" />
  </layout>
  <!-- The following two filters insure only log requests of 
        version '1' use this Appender -->
</appender>
<appender name="RollingLogFileAppender2" type="log4net.Appender.RollingFileAppender">
  <file value="TestLog.log" />
  <appendToFile value="true" />
  <!-- next line uses a minimal locking model that allows multiple processes to write to the same file -->
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  <rollingStyle value="Size" />
  <maxSizeRollBackups value="10" />
  <maximumFileSize value="10MB" />
  <staticLogFileName value="true" />
  <!-- make the most recent log the highest numbered log -->
  <countDirection value="1" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%-5level %date{MM-dd-yyyy HH:mm:ss.ff} [%property{NDC}] [Thread: %thread] %c{1} Method:%method(%file{1}, Line:%line) %newline%message" />
  </layout>
</appender>
<root>
  <level value="DEBUG" />
  <appender-ref ref="RollingLogFileAppender1" />
  <appender-ref ref="RollingLogFileAppender2" />
</root>

Это можно найти в документации Apache здесь: Документы Apache Log4Net Просто найдите на этой странице «тот же файл».

Надеюсь, это поможет.

1 голос
/ 10 июня 2010

Вы можете понять, есть ли проблема с log4net, проверяющим окно вывода в Visual Studio. Ошибки журнала библиотеки там, очень полезны для обнаружения ошибок конфигурации.

...