2013-11-29 37 views
1

我試圖建立日誌使用log4net的,與log4net的的沒有任何經驗的fileappender,在WPF應用程序從this SO answer採取編程改變log4net的

,我有

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> 

我想知道爲什麼追加呃「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"/>