Log4Net записывает файл из многих процессов

Можно ли записать из 5 разных процессов в один и тот же файл журнала?

Я использую Log4Net для ведения журнала, но похоже, что только один процесс записывает в файл, когда я закрываю этот процесс, записывается второй процесс.

Я хочу, чтобы все записывались вместе.

Как?

Ответ 1

Если вы хотите записать в один файл из нескольких процессов, добавьте MinimalLock как LockinModel в свой <appender> node:

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

Остерегайтесь того, что это влияет на производительность.

Ответ 2

Хотя советы @Erwin работают в большинстве случаев, вы должны пересмотреть, если лучшая архитектура может помочь повысить производительность.

Например, на сервере Microsoft IIS работает много рабочих процессов, каждый из которых отправляет записи журнала в сервисный сервис IIS через именованный канал. И только сервисный сервис IIS имеет право записывать файлы журналов. Таким образом, рабочим процессам не нужно блокировать файлы журналов, и процесс обслуживания может кэшировать записи и записывать их в пакетах.

Очень легко следовать подходу IIS и достичь хорошей производительности. без блокировок файлов.

(Обновлено: теперь вы можете использовать LogMaster4Net, который реализует такую ​​архитектуру на основе UDP.)