2017-02-13 14 views
3

При динамической настройке имени файла журнала RollingFileAppender, используемый с блокировкой log4net.Appender.FileAppender+MinimalLock , похоже, ничего не записывает в файл. Однако при использовании приложения без этой модели блокировки работает журнал.log4net с функцией блокировки MinimalLock не работает при программировании имени файла программно

В конфигурационном файле ниже, Appender1 работает, но Appender2 не:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/> 
    </configSections> 

    <log4net> 
    <appender name="Appender2" 
    type="log4net.Appender.RollingFileAppender" > 
     <file type="log4net.Util.PatternString" value="%property{LogName}" /> 
     <encoding value="utf-8" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="10000KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="[%logger] %message%n" /> 
     </layout> 
     <lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 
    </appender> 
    <appender name="Appender1" 
    type="log4net.Appender.RollingFileAppender" > 
     <file type="log4net.Util.PatternString" value="%property{LogName}" /> 
     <encoding value="utf-8" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="10" /> 
     <maximumFileSize value="10000KB" /> 
     <staticLogFileName value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%message%n" /> 
     </layout> 
    </appender> 
    <logger name="myLogger" additivity="false"> 
     <level value="DEBUG" /> 
     <appender-ref ref="Appender2" /> 
    </logger> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="Appender1" /> 
    </root> 
    </log4net> 
</configuration> 

Вот пример кода, я тестирование:

static void Main(string[] args) 
{ 
    ILog logger = LogManager.GetLogger("myLogger"); 
    GlobalContext.Properties["LogName"] = "Log1.log"; // <== The log file name is getting set here. 
    log4net.Config.XmlConfigurator.Configure(new FileInfo(@"Logger.config")); 

    logger.Info("Sample log entry"); 
} 

Еще одно наблюдение я сделал то, что если я удалю регистратор корневого уровня, запись работает.

ответ

4

Я думаю, вы должны добавить

<lockingModel type="log4net.Appender.FileAppender+MinimalLock" /> 

обоим appenders, его нет в Appender1. Это объяснит, почему происходит удаление элемента root.

+0

Невозможно ли иметь приставки с различными типами блокировки? – pmohandas

+0

Да, но каждый файл, который пишет appenders, должен иметь одну и ту же модель блокировки. – Peter

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

  • Нет связанных вопросов^_^