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.)