Каков предпочтительный способ регистрации значения ConversionPattern, используемого log4net? - PullRequest
1 голос
/ 26 мая 2010

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

Например, если мой раздел log4net выглядит так:

<log4net xsi:noNamespaceSchemaLocation="http://csharptest.net/downloads/schema/log4net.xsd"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <appender name="MainAppender" type="log4net.Appender.RollingFileAppender">
      <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
      <file type="log4net.Util.PatternString" value="${NCLOGS}\NC.Entities.Test${CI_TAG}.%processid.log" />
      <appendToFile value="true" />
      <rollingStyle value="Size" />
      <maxSizeRollBackups value="10" />
      <MaximumFileSize value="10MB" />
      <StaticLogFileName value="false" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
    <appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="INFO" />
      <appender-ref ref="ConsoleAppender" />
      <appender-ref ref="MainAppender" />
    </root>
</log4net>

Тогда я бы хотел видеть % date [% thread]% -5level% logger -% message% newline в файле журнала.

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

Сейчас я использую магию XPATH, но мне интересно, есть ли лучшее решение, возможно, с использованием некоторого API log4net.

Спасибо.

1 Ответ

0 голосов
/ 27 мая 2010

Один из способов сделать это - добавить шаблон как свойство при запуске приложения. Вы можете прочитать шаблон из файла конфигурации, или может быть способ получить шаблон для каждого из программных приложений программно, и в этом случае вы можете добавить одно свойство для каждого приложения, а затем каждый шаблон для каждого приложения зарегистрировать свойство. 1001 *

Примерно так, чтобы добавить свойство:

log4net.GlobalContext.Properties["PatternForAppender"]= getLoggerPattern();

И что-то вроде этого, чтобы включить его в журнал:

<conversionPattern value="%logger (%property{PatternForAppender}) [%level] - %message%newline" /> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...