2013-11-29 2 views
1

Я пытаюсь настроить ведение журнала с помощью log4net, без предварительного опыта log4net, в приложении WPFпрограммно изменения fileappender из log4net

взяты из this SO answer, у меня есть

public partial class App : Application 
{ 
    private static readonly ILog Log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
    protected override void OnStartup(StartupEventArgs e) 
    { 
     XmlConfigurator.Configure(); 
     base.OnStartup(e); 

     //Set data directory 
     string baseDir = Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + @"\BlowTrial"; 
     if (!Directory.Exists(baseDir)) 
     { 
      Directory.CreateDirectory(baseDir); 
     } 

     //Set logging 
     foreach (var appender in LogManager.GetRepository().GetAppenders()) 
     { 
      var fileAppender = appender as FileAppender; 
      if (fileAppender != null) 
      { 
       fileAppender.File = fileAppender.File.Replace("|DataDirectory|", baseDir); 
        ... 

но есть ни один из элементов в LogManager.GetRepository().GetAppenders() несмотря на app.config, имеющей следующий в узле конфигурации:

<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,Log4net"/> 
</configSections> 
<log4net> 
<root> 
    <level value="DEBUG"/> 
    <appender-ref ref="LogFileAppender"/> 
    <appender-ref ref="ColoredConsoleAppender"/> 
</root> 
<appender name="LogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <param name="File" value="|DataDirectory|\log.txt"/> 
    <param name="AppendToFile" value="true"/> 
    <rollingStyle value="Size"/> 
    <maxSizeRollBackups value="10"/> 
    <maximumFileSize value="1MB"/> 
    <staticLogFileName value="false"/> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger: %message%newline"/> 
    </layout> 
</appender> 
<appender name="ColoredConsoleAppender" type="log4net.Appender.ConsoleAppender"> 
    <layout type="log4net.Layout.PatternLayout"> 
    <conversionPattern value="%date [%thread] %-5level %logger: %message%newline"/> 
    </layout> 
</appender> 
</log4net> 

Я было интересно, почему Append er «LogFileAppender» не является элементом в методе LogManager.GetRepository().GetAppenders() и как я могу изменить имя файла?

Спасибо за ваш опыт

ответ

2

RollingFileAppender делает некоторые вещи внутри, когда он инициализируется (с использованием XmlConfigurator.Configure();), что приводит к пути |DataDirectory|\log.txt бросает System.ArgumentException при попытке получить путь. Вы можете посмотреть, как отлаживать log4net, если вы хотите получить более подробную информацию here.

Согласно this answer, так как вы используете специальный путь к папке в любом случае, вы можете указать это в app.config, а не беспокоиться о настройке пути из кода:

<param name="File" type="log4net.Util.PatternString" value="%envFolderPath{CommonApplicationData}\\BlowTrial\\log.txt"/> 
Смежные вопросы