Подтвердить что ты не робот

Лучшая практика регистрации нескольких экземпляров приложений?

Я, наконец, попробовал log4net для своего рабочего стола WPF.

Я борюсь с тем, что RollingFileAppender не поддерживает встроенную поддержку нескольких экземпляров приложений.

Мне не нравится идея ограничить приложение единственным экземпляром, чтобы сделать логгером счастливым. Одиночные трюки - это все уродливые хаки.

Использование идентификатора процесса в файле файла журнала также недостаточно. У этого есть потенциал съесть неограниченное пространство, поскольку RollingFileAppender бесполезен в этой ситуации.

Одним из решений, вероятно, будет отправка журналов в другой процесс, который позаботится о сериализации вывода в файлы. Но это создает новые головные боли.

Что вы берете на себя?

4b9b3361

Ответ 1

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

Здесь у вас есть несколько вариантов:

Несколько FileAppender с минимальной блокировкой

Используйте несколько экземпляров FileAppender, указывающих на один и тот же файл и настроенных с минимальной блокировкой. Это позволит выполнять одновременные операции записи из нескольких процессов:

<appender name="FileAppender" type="log4net.Appender.FileAppender">
    <file value="Log.txt" />
    <appendToFile value="true" />
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern
            value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
</appender>

Несколько EventLogAppender

Используйте несколько экземпляров EventLogAppender, которые записываются в общий источник событий Windows:

<appender name="EventLogAppender" type="log4net.Appender.EventLogAppender" >
    <applicationName value="MyApp" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern
            value="%date [%thread] %-5level %logger - %message%newline" />
    </layout>
</appender>

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

Связанные ресурсы:

Ответ 2

Другой вариант, когда вы хотите регистрироваться в файлах перекатывания и избегать рисков записи в тот же файл журнала, - программно изменить имя файла журнала log4net, Например, вы можете передать имя файла журнала или часть его в качестве параметра запуска процесса, а затем установить его из кода.

Просто убедитесь, что вы делаете это изменение пути до того, как произойдет какой-либо журнал. В противном случае можно использовать аналогичную конфигурацию для "Несколько файлов FileAppender с минимальной блокировкой" из предыдущего ответа.