2013-07-10 70 views
9

這是一個很常見的問題,但我一直無法獲得工作答案。這裏是我的配置文件:log4net:如何動態設置記錄器文件名?

<?xml version="1.0" encoding="utf-8"?> 
<log4net> 
    <appender name="RollingFile" type="log4net.Appender.RollingFileAppender"> 
    <file value="CraneUserInterface.log" /> 
    <appendToFile value="true" /> 
    <maxSizeRollBackups value="90" /> 
    <rollingStyle value="Size" /> 

    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date - %message%newline" /> 
    </layout> 
    </appender> 

    <root> 
    <level value="DEBUG" /> 
    <appender-ref ref="RollingFile" /> 
    </root> 

但我需要在運行時確定實際的日誌文件名。我發現了一個很好的示例here,但是當我嘗試循環調用GetIterators()時返回的集合時,我發現該集合是空的。

我需要將名稱「CraneUserInterface.log」更改爲「CraneUserInterface_1.log」,或2或3,具體取決於程序在運行時讀取的內容。我怎樣才能做到這一點?

這是我在使用樣品中的代碼第一遍:

static bool ChangeLogFileName(string AppenderName, string NewFilename) 
{   
    // log4net.Repository.ILoggerRepository RootRep; 
    // RootRep = log4net.LogManager.GetRepository(); 
    log4net.Repository.ILoggerRepository RootRep = m_logger.Logger.Repository; 
    foreach (log4net.Appender.IAppender iApp in RootRep.GetAppenders()) 
    { 
    string appenderName = iApp.Name; 
    if (iApp.Name.CompareTo(AppenderName) == 0 
     && iApp is log4net.Appender.FileAppender) 
    { 
     log4net.Appender.FileAppender fApp = (log4net.Appender.FileAppender)iApp; 
     fApp.File = NewFilename; 
     fApp.ActivateOptions(); 
     return true; // Appender found and name changed to NewFilename 
    } 
} 
return false; // appender not found 
} 

非常感謝!

+0

儘管讀了兩次,我不知道你爲什麼會想這樣做。 –

+1

這是用於將在退火工廠的起重機的駕駛室內的筆記本電腦。該工廠有3臺起重機。由於我不在工廠,也不會在不久的將來,我有一臺假裝爲三臺起重機的模擬器。這個程序將會同時運行3個實例。我需要分別跟蹤三臺起重機的事件,並且可能應該避免同時將該程序的兩個實例寫入同一個日誌文件。 –

+0

我覺得我的直覺是正確的。你正試圖解決錯誤的問題。 –

回答

4

你可以使用這個函數: 在這個函數中首先獲取你在webconfig中設置的文件位置,之後你可以添加你想要的任何路徑!像日期!我們的顧客 !或.....

WebConfig:

<appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender"> 
    <file value="C:\\t4\\"/> 
    <appendToFile value="true"/> 
    <rollingStyle value="Composite"/> 
    <datePattern value="_yyyy-MM-dd.lo'g'"/> 
    <maxSizeRollBackups value="10"/> 
    <maximumFileSize value="1MB"/> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date User:%identity IP:%X{addr} Browser: %X{browser} Url: %X{url} [%thread] %-5level %c:%m%n"/> 
    </layout> 
</appender> 

功能:

public static void ChangeFileLocation(string _CustomerName,string _Project) 
{ 
    XmlConfigurator.Configure(); 
    log4net.Repository.Hierarchy.Hierarchy h =(log4net.Repository.Hierarchy.Hierarchy)LogManager.GetRepository(); 

    foreach (IAppender a in h.Root.Appenders) 
    { 
     if (a is FileAppender) 
     { 
      FileAppender fa = (FileAppender)a; 
      string sNowDate= DateTime.Now.ToLongDateString(); 
      // Programmatically set this to the desired location here 
      string FileLocationinWebConfig = fa.File; 
      string logFileLocation = FileLocationinWebConfig + _Project + "\\" + _CustomerName + "\\" + sNowDate + ".log"; 

      fa.File = logFileLocation; 
      fa.ActivateOptions(); 
      break; 
     } 
    } 
} 

,並導致這樣的:C:\ T4 \ TestProject \ customer1表\週六,8月31日,2013.log

+0

請不要在多個問題上發佈完全相同的答案 - 他們或者不太適合,或者問題是重複的,應該標記爲這樣 – kleopatra