Общая регистрация log4net для различных экземпляров DLL - PullRequest
1 голос
/ 28 марта 2011

У меня проблемы с настройкой log4net для работы так, как я хочу.У меня есть библиотека классов Library.dll, которая используется как моим приложением Mine.exe, так и сторонним приложением Other.exe.У меня есть другая библиотека классов Util.dll, которая используется как Mine.exe, так и Library.dll.

Mine.exe и Other.exe выполняются параллельно, и я хочу использовать два экземпляра Library.dllтот же лог-файл.Он также должен быть отделен от лог-файла Mine.exe.Util.dll должен регистрироваться в лог-файле Library.dll при вызове из Library.dll, а лог-файл Mine.exe при вызове из Mine.exe.

Редактировать: я думаю, что это было немного трудно понятьВот как я хочу, чтобы я работал:

Mine.exe регистрирует в Mine.log
Other.exe ничего не регистрирует (стороннее приложение)
Mine.exe -> Library.dll регистрируется в C: \ Library.log
Other.exe -> Library.dll регистрируется в C: \ Library.log
Mine.exe -> Util.dll регистрируется в Mine.log
Mine.exe -> Library.dll -> Util.dll регистрирует в C: \ Library.log
Other.exe -> Library.dll -> Util.dll регистрирует в C: \ Library.log Other.exe не делаетt Вызовите Util.dll напрямую.

Сначала я попытался загрузить пользовательскую конфигурацию log4net в Library.dll, используя:

log4net.Config.XmlConfigurator.Configure(new FileInfo("Library.log4net.config"));

Но в результате Mine.exe также вошел в библиотеку.dll logfile.

Затем я попытался добавить следующий атрибут сборки в Library.dll:

[assembly: log4net.Config.Repository("Library")]

, который содержал отдельные журналы, но затем Util.dll записывался в журнал Mine.exeфайл даже при вызове из библиотеки .dll.Я думаю, я мог бы использовать репозиторий ("Util") в Util.dll, AliasReposity ("Util", "Library") в Library.dll и AliasReposity ("Util", "Mine") в Mine.exe, но на самом деле у меня многобиблиотеки классов в проекте и лучше не идти по этому пути.

Есть идеи, как заставить это работать?

/ Andreas

1 Ответ

1 голос
/ 29 марта 2011

Я бы не стал делиться файлами журналов, если честно.Существуют всевозможные проблемы с многопоточностью, с которыми вы можете столкнуться, если войдете в файл из двух процессов.Обычно один экземпляр log4net просто не сможет войти в систему, если другой есть, поэтому это приведет к тому, что записи журнала пропадут.Также, если они находятся в одном и том же файле журнала, вам нужно поместить имя процесса в средство форматирования журнала, чтобы вы знали источник.Звучит сложно.По соглашению я обычно делаю следующее:

  • Ссылка на один и тот же файл log4net в каждом процессе.
  • Создание раздела конфигурации log4net в файлах process1.exe.config и process2.exe.config отдельно.
  • Добавьте файл appender для process1.exe.log и process2.exe.log отдельно в каждой конфигурации.

Вы получаете два файла для двух процессов, но ими легче управлять,Вы можете получить средства просмотра файлов журнала, которые могут отображать оба журнала вместе (хотя я не использую этот подход), например: http://tailforwin32.sourceforge.net/

...