Log4net - регистрировать части кода, используемые в нескольких методах - PullRequest
2 голосов
/ 14 декабря 2009

У меня проблемы. Мое приложение можно разделить на 3 логические части (импорт, обработка и экспорт). Есть несколько частей кода, которые используются в нескольких частях моего приложения. Как определить, какая часть кода называется моим объектом log4net?

Какова лучшая практика для регистрации информации в частях кода, которые вызываются из нескольких мест в приложении?

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

Ответы [ 2 ]

2 голосов
/ 22 декабря 2009

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

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

<logger name="Logger1" additivity="false">
      <level value="INFO" />
      <appender-ref ref="Logger1File" />
</logger>

Чтобы использовать его в своем коде, используйте ссылку так:

private static ILog _Logger1= LogManager.GetLogger("Logger1");

Все, что вы регистрируете в Logger1, будет отделено от любого другого регистратора, включая корневой.

1 голос
/ 14 декабря 2009

log4net предоставляет контекстов для этой цели. Я бы предложил использовать стек контекста следующим образом:

using(log4net.ThreadContext.Stacks["Part"].Push("Import"))
    log.Info("Message during importing");

using(log4net.ThreadContext.Stacks["Part"].Push("Processing"))
    log.Info("Message during processing");

using(log4net.ThreadContext.Stacks["Part"].Push("Export"))
    log.Info("Message during exporting");

Значение в стеке может быть показано в журналах путем включения %property{Part} в PatternLayout.

...