2013-08-06 169 views
3

我有一个配置文件,用于包含log4net记录器配置的项目。 这是因为它遵循:如何在log4net配置文件中设置保存路径dynamicaly

<log4net> 
    <appender name="LogFileAppender" type="log4net.Appender.FileAppender"> 
     <file value="MyLogFile.txt" /> 
     <appendToFile value="true" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <header value ="Start file processing..."/> 
     <conversionPattern value="%newline%date - %message%exception" /> 
     <footer type="log4net.Util.PatternString" value="File processing finished.%newline%newline" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="DEBUG" /> 
     <appender-ref ref="LogFileAppender" /> 
    </root> 
    </log4net> 

我想知道是否有可能dynamicaly改变我的价值:

<file value="MyLogFile.txt" /> 

回答

0

您可以阅读log4net的文件时,使用XML解析器解析它您的应用程序并更改文件值属性。然后保存log4net文件。如果您有watch = true,则新配置将被选为新配置。

1

动态改变log4net的配置最简单的方法是设置XML配置器观看配置文件的变化:

[assembly: XmlConfigurator(Watch = true)] 

当您将对应用程序配置文件(一个生活在exe附近的文件)进行一些更改时,log4net将自动重新配置自身,并将进一步输出到其他文件。


如果出于某种原因想这样做编程,那么你需要从记录器库(又名层次)获取文件的appender实例:

var fileAppender = LogManager.GetLoggerRepository() 
          .GetAppenders() 
          .OfType<FileAppender>() 
          .FirstOrDefault(fa => fa.Name == "LogFileAppender"); 

,并更改它的设置:

if (fileAppender != null) 
{ 
    fileAppender.File = Path.Combine(Environment.CurrentDirectory, "foo.txt"); 
    fileAppender.ActivateOptions(); 
} 

请记住,简单的设置File属性将不会打开新文件 - 它只是设置文件名,它应该在appender激活期间打开。所以,您需要在更改文件路径后手动激活它。

相关问题