MinimalLock частично решает проблему (как упоминалось в @Mark), но если вы используете RollingFileAppender, вы столкнетесь с другими проблемами. Когда файл катится, вы можете оказаться в состоянии гонки, когда один процесс перезаписывает недавно созданный файл журнала другого процесса.
Другие опции включают RemoteLogger, где у вас есть простой сервер, настроенный на получение и запись событий регистрации, отправленных другими процессами. Кроме того, вы можете войти в базу данных SQL. Я написал простое приложение, которое регистрирует в Redis; вам нужно простое приложение для чтения из Redis и записи в файл. Проблема с этими подходами состоит в том, что они все вводят точку отказа. Когда что-то работает неправильно, чаще всего вам нужны журналы, и тогда они могут быть недоступны.
Таким образом, мое решение состояло в том, чтобы полностью избежать этой проблемы, передав каждый журнал процесса в отдельный файл. Это было легко сделать с изменением конфигурации. В вашей конфигурации (Rolling)FileAppender
используйте:
<file type="log4net.Util.PatternString" value="c:\mylog-[%processid].txt" />
Идентификатор процесса становится частью имени файла. Да, это означает, что теперь у вас есть несколько файлов журналов, которые нужно прочесать, но агрегатор файлов журналов, такой как Graylog, Splunk или Logscape, может помочь.