Я считаю, что вы пытаетесь изобрести колесо, есть несколько инструментов для абстрагирования логгеров от вашего кода, отделяющих фреймворк логгеров от вашего кода:
http://slf.codeplex.com/
http://netcommon.sourceforge.net/
Они наиболее распространены в приложениях .Net.
Что ж, если вы настаиваете на использовании своей собственной абстракции (которая действительна), вот мое предложение:
Прежде всего, я предполагаю, что у вас будет что-то вроде:
interface ILogger
{
void Debug(string message);
void Info(string message);
void Warn(string message);
…..
}
Хорошо, поэтому в свой код вы должны вставить одноэлементную ссылку на свой регистратор, например:
x.For<ILogger>().Singleton().Use<MyLogger>();
Я обычно предпочитаю конвенцию, а не конфигурацию, но в случае с регистраторами конфигурация через файл конфигурации является большим преимуществом, потому что, когда ваш код находится в производстве, вам иногда может потребоваться изменить правила регистрации, отключив или включив регистраторы, изменив уровень журнала и включить / отключить именованные средства ведения журнала.
Самый простой и наиболее многоразовый способ, который я нашел для этого, - это поместить конфигурацию во внешний файл, как вы прокомментировали, тогда я не буду беспокоиться о вызове XmlConfigurator
в коде, потому что для меня проще просто добавить пару настроек приложения в мой файл конфигурации вроде этого
<!-- Relative to the application root path -->
<add key="log4net.Config" value="Logger.log4net"/>
<add key="log4net.Config.Watch" value="True"/>
Вот и все. Эти настройки приложения имеют приоритет над вашей конфигурацией log4net, и их легко поддерживать. Ваш файл конфигурации будет выглядеть так:
<?xml version="1.0" encoding="utf-8" ?>
<!-- This section contains the log4net configuration settings -->
<log4net>
<!-- Define some output appenders -->
<appender name="LogFileAppender" type="log4net.Appender.FileAppender" >
<file value="webapp-log.txt" />
<appendToFile value="true" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date [%thread] %-5level %logger [%ndc] - %message%newline" />
</layout>
</appender>
<!-- Setup the root category, add the appenders and set the default priority -->
<root>
<level value="DEBUG" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
Чтобы настроить другие приложения: нажмите здесь
В ваших проектах вам нужна только ссылка на компонент абстракции вашего регистратора, и просто в веб-проекте (или приложении Windows, это то же самое) добавьте файл конфигурации log4net и только эти настройки приложения.
Поскольку вы создаете компонент многократного использования, я бы порекомендовал вам настроить внутренний сервер Nuget в вашей организации (это просто приложение IIS) и использовать его для развертывания ваших компонентов, в данном случае библиотеки, содержащей регистратор. Также было бы лучше, если бы вы создали другой пакет Nuget, содержащий только настройки приложения и файл конфигурации log4net, чтобы вы могли установить этот пакет Nuget только в своем веб-проекте.
person
Jupaol
schedule
10.06.2012
ILog
, если вам это действительно нужно. - person default.kramer   schedule 06.06.2012