2012-02-10 6 views
0

У меня есть приложение, которое загружает модули PlugIn с отражением. Приложение является определение log4net лог-Appender в app.config, как:log4net - разные лог-файлы для сборки

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="logs\xxx.log" /> 
    <appendToFile value="true" /> 
    <rollingStyle value="Size" /> 
    <maxSizeRollBackups value="10" /> 
    <maximumFileSize value="1MB" /> 
    <staticLogFileName value="true" /> 
    <threshold value="DEBUG" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger{2} - %message%newline" /> 
    </layout> 
</appender> 

Я получаю Logger в коде, как:

private static readonly ILog log = LogManager.GetLogger(typeof(Indexer)); 

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

Первая проблема заключается в том, что модули совместно используют классы бизнес-библиотеки (они находятся в сборке, которая используется для всех модулей), которая также генерирует записи журнала. Эти записи также должны быть вставлены в лог-файл модуля.

Вторая проблема заключается в том, что я не знаю модули в процессе разработки. Поэтому я не могу вставить некоторую конфигурацию в app.config.

+0

Итак, если один и тот же метод экземпляра вызывается из другой сборки, вы хотите, чтобы его частный журнал записывал в другой файл журнала? Это невозможно. Почему вы все так делаете? Похоже, вы используете ведение журнала для более чем простого устранения неполадок. – Groo

+0

@Groo - нет, существуют разные экземпляры (но одинаковые классы), используемые из разных сборок. – BennoDual

+0

Но они используются из разных сборок в одном и том же приложении (одно приложение)? Если вы регистрируете логгеров по полю 'static' (как вы показали), то есть один экземпляр регистратора. – Groo

ответ

2

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

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

Hers некоторые (code), чтобы получить Вас вдохновило:

// Setup RollingFileAppender 
    log4net.Appender.RollingFileAppender fileAppender = new log4net.Appender.RollingFileAppender(); 
    fileAppender.Layout = new log4net.Layout.PatternLayout("%d [%t]%-5p %c [%x] - %m%n"); 
    fileAppender.MaximumFileSize = "100KB"; 
    fileAppender.MaxSizeRollBackups = 5; 
    fileAppender.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Size; 
    fileAppender.AppendToFile = true; 
    fileAppender.File = fileName; 
    fileAppender.Name = "XXXRollingFileAppender"; 
    log4net.Config.BasicConfigurator.Configure(fileAppender); 

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

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