Log4Net GetLogger создает скользящие файлы даже для файлов, на которые нет ссылок - PullRequest
1 голос
/ 07 апреля 2010

У меня есть решение C #, которое содержит три исполняемых файла. У меня есть каждый из этих трех исполняемых файлов в одном файле конфигурации log4net. При запуске каждого из исполняемых файлов они извлекают регистратор (по одному регистратору на исполняемый файл, как описано ниже в файле конфигурации). Когда один из исполняемых файлов выполняет Log.GetLogger (), он создает все скользящие файлы вместо одного прокручиваемого файла, который называется appender-ref в конфигурации регистратора исполняемого файла.

Например, когда я запускаю исполняемый файл отправляющего демона, он выполняет Log.GetLogger («SendingDaemonLogger»), который создает 3 файла Log / RuleScheduler.txt, Log / NotificationGenerator.txt и Log / NotificationSender.txt вместо только требуемого Вход / NotificationSender.txt.

Затем, когда я запускаю другой исполняемый файл, например, демон планировщика правил, этот другой процесс не может записать в Log / RuleScheduler.txt, потому что он был создан и заблокирован отправляющим процессом демона.

Я предполагаю, что может быть три разных решения моей проблемы:

  1. GetLogger должен создавать только обновляемые добавочные файлы, на которые есть ссылки в конфигурации

  2. У меня должен быть один файл конфигурации для каждого исполняемого файла, таким образом, каждый файл конфигурации может содержать список только одного добавляемого файла, и запуск каждого из исполняемых файлов не будет создавать скользящие файлы других демонов. Однако я не хочу этого делать, потому что некоторые настройки (приложение SMTP, приложение консоли) совместно используются демонами, и я не хочу иметь дубликаты для обслуживания. Разве есть способ иметь конфигурационный файл, в том числе и другой?

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

Заранее спасибо за помощь!

У меня проблемы с размещением файла конфигурации здесь (этот сайт интерпретируется как HTML). Пожалуйста, перейдите по следующей ссылке, чтобы увидеть мой файл конфигурации log4net: файл конфигурации log4Net

Ответы [ 2 ]

1 голос
/ 03 ноября 2010

Лучше поздно, чем никогда ...

Используйте следующее определение имени файла для файлового приложения.%appdomain будет заменено при запуске дружественным именем приложения.Теперь вы можете использовать один и тот же файл конфигурации для нескольких приложений и при этом иметь отдельные файлы журналов.Нет необходимости настраивать несколько приложений ...

<file  type="log4net.Util.PatternString" value="C:\logs\%appdomain.log" />

см. документацию PatternString для доступных шаблонов.

0 голосов
/ 08 апреля 2010

Я думаю, что все 3 файла созданы по причине, указанной в этом ответе . Хотя вы можете написать свой собственный appender, который не показывает такое поведение, это не рекомендуется. Это оставляет вам либо иметь 3 отдельных файла конфигурации, либо настраивать минимальную блокировку:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...