2015-01-08 4 views
1

Я пытаюсь очистить конфигурацию протоколирования, которую в настоящее время использует одно из наших приложений для ее реализации log4net. Приложение вызывается с аргументом, содержащим путь к файлу XML. Этот XML-файл включает в себя различные сведения о конфигурации, одним из которых является имя регистратора.loglognet имя регистратора в appender

В настоящее время каждый файл конфигурации имеет свой собственный регистратор, и каждый регистратор имеет свои собственные приложения. В качестве примера мы имеем:

  • регистратор job1
  • регистратор job2
  • регистратор job3

и

  • Appender consoleJob1
  • Appender consoleJob2
  • Appen дер consoleJob3
  • Appender rollingFileJob1
  • Appender rollingFileJob2
  • Appender rollingFileJob3
  • Appender smtpJob1
  • Appender smtpJob2
  • Appender smtpJob3

Даже если каждый из этих appenders имеют почти идентичные конфигурации. С сотнями конфигурационных файлов этот раздел конфигурации ведения журнала app.config довольно велик. Я считаю, что я могу объединить большинство из них только с несколькими родовыми добавками (Console, rollFile, smtpToIT, smptpToSupport и т. Д.) И изменить каждый регистратор на использование общих приложений.

Огромный блокпост к тому, как я визуализирую эту работу, заключается в том, что каждый appender должен будет использовать имя регистратора в конфигурации где-нибудь. Есть ли переменная или параметр, который я могу использовать в приложении, который позволит приложению использовать имя регистратора? Например, RollingFileAppender должен войти в '\ log [loggername] .txt' У smtpAppender должен быть объект «Log for [loggername] на MM \ DD \ YYYY».

Я взглянул на http://logging.apache.org/log4net/release/config-examples.html и считаю, что понимаю, как можно добавить дату, но я ничего не вижу о доступе к имени регистратора из приложения.

Есть ли какой-либо доступ к ресурсу регистратора, используемого в приложении? Кроме того, я понимаю, как настроить log4net, с добавлением переходов между несколькими регистраторами? Я не слышал о log4net до тех пор, пока несколько недель назад, так что, возможно, я ошибаюсь.

ответ

2

Я нашел решение в другом месте, отвечая на другой вопрос. К сожалению, я не помню, где я его нашел, и только вернулся к моему первоначальному вопросу из-за ответа Ньютопиана.

Вы можете установить глобальное свойство через следующую строку:

log4net.GlobalContext.Properties["id"] = "SomeText"; 

Затем обратитесь к нему в Appender, как я ниже:

<appender name="NewAuto2ProcessingTestFILE" type="log4net.Appender.RollingFileAppender"> 
    <file type="log4net.Util.PatternString" value="Log/%property{id}NewAuto2ProcessingTest.txt" /> 
    <appendToFile value="true" /> 
    <maxSizeRollBackups value="10" /> 
    <staticLogFileName value="true" /> 
    <datePattern value=".yyyy-MM-dd.\\t\\x\\t" /> 
    <rollingStyle value="Date" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%d [%t] %-5p - %m%n" /> 
    </layout> 
</appender> 
+0

это может сыграть трюки с вами в многопоточном приложении, хотя, если идентификатор не изменяется слишком часто, это может сделать трюк , – Newtopian

+0

Согласны, в наших обстоятельствах это работает отлично, потому что каждое задание создает новый экземпляр приложения. Это основное приложение, которое принимает XML-файл в качестве ввода, XML-файл структурирован в шагах, и каждый шаг содержит информацию о конкретном действии. Таким образом, одно задание может состоять в том, чтобы взять файл с FTP-сервера x, шаг 2 расшифровать его, шаг 3 разобрать его в БД, шаг 4 запустить хранимую процедуру, шаг 5 создать плоский файл из запроса, шаг 6 зашифровать файл, шаг 7 отправьте новый файл на другой ftp-сайт. Каждая работа имеет свой собственный экземпляр приложения, поэтому никаких проблем с потоком. –

1

Ищет то же самое, к сожалению, похоже, что это невозможно из коробки, проверьте документ here о принятых переменных в шаблоне String.

Возможно, вам понадобилось бы создать свой собственный appender или собственный форматировщик, чтобы получить доступ к большему количеству переменных (я подозреваю, что оба).

+0

Эй, я на самом деле нашел ответ в последний раз. Я не помню, где, но я копировал важные части из моей реализации в своем собственном ответе. Я забыл, что я опубликовал это, пока не получил уведомление о вашем ответе. –

+0

https://logging.apache.org/log4net/release/sdk/html/T_log4net_Util_PatternString.htm новая ссылка –

Смежные вопросы