С log4net, вы указываете, какой appender использовать? - PullRequest
1 голос
/ 25 октября 2011

Когда у вас есть 2 приложения, скажем, одно для ошибок отладки и одно для ошибок продукта, вы явно создаете в своем коде 2 класса журналов или в основном собирается ли приложение писать какие-либо сообщения журнала, которые соответствуют определенным критериям?

Таким образом, в вашем коде вы используете один метод журнала, и в зависимости от того, как настроены ваши приложения, он будет записывать сообщение, если, например, оно зарегистрировано из определенного пространства имен или имеет определенный уровень журнала.

То есть, возможно, одна запись журнала записывается в 2 файла журнала?

1 Ответ

5 голосов
/ 25 октября 2011

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

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

 <log4net>
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
      <file value="c:\logs\MySite"/>
      <appendToFile value="true"/>
      <datePattern value=".yyyy-MM-dd.\l\o\g"/>
      <rollingStyle value="Date"/>
      <MaxSizeRollBackups value="14"/>
      <param name="StaticLogFileName" value="false"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d{HH:mm:ss.fff} [%thread] %-5level %logger{1} - %m%n"/>
      </layout>
    </appender>
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender">
      <applicationName value="Trading.Web"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d{HH:mm:ss.fff} [%thread] %-5level %logger{1} - %m%n"/>
      </layout>
      <filter type="log4net.Filter.LevelRangeFilter">
        <param name="LevelMin" value="WARN"/>
        <param name="LevelMax" value="ERROR"/>
      </filter>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="RollingFileAppender"/>
      <appender-ref ref="EventLogAppender" />
    </root>
  </log4net>

Итак, это:

  _log.Debug("This is a debug message");

Отображается только в файле журнала (поскольку он не соответствует критериям фильтра приложения журнала событий).

Но это:

  _log.Error("This is an error message.");

Будет входить как в файл журнала, так и в программу просмотра событий.

ОБНОВЛЕНИЕ : Если у вас есть вопрос о фильтрации, если у вас было:

<root>
  <level value="DEBUG"/>
  <appender-ref ref="RollingFileAppender"/>
</root>

<!-- Print only messages of level WARN or above in the namespace Com.Foo -->
<logger name="Com.Foo">
    <level value="WARN" />
</logger>

Тогда все вещи в Com.Foo будут регистрироваться, если WARN или выше, но все остальное будет регистрироваться в DEBUG или выше ....

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