2011-10-21 116 views
1

在互聯網上有幾篇關於同一主題的文章,我也可以從Windows窗體應用程序寫入多個日誌文件。但我的要求稍有不同。Log4Net和多個日誌文件

我的應用程序有兩種運行模式,比如說「BuySomething」模式&「SellSomeOtherThing」模式。當它處於「BuySomething」模式時,我想寫入Log_BuySomething.txt,否則將會寫入Log_SellSomeOtherThing.txt(一種模式肯定會被選中)。

在app.config文件中,我的結構與StackOverflow Question的最後一篇文章中的結構相同。
我的問題是,當執行代碼XmlConfigurator.Configure();時,它會在app.config文件中創建LogFileAppenders中提及的名稱的空日誌文件。我想下面的代碼將解決這個問題,但是事實並非如此:

if (mode == BuySomeThing) 
{ 
    logger = LogManager.GetLogger("LogFileAppender1"); 
} 
else 
{ 
    LogManager.GetLogger("LogFileAppender2"); 
} 
XmlConfigurator.Configure(); 

我如何確保只有適當的日誌文件的應用程序的該實例創建?

回答

1

如果我理解你,你的應用程序不會在模式之間切換。

如果是這樣,那麼我會懷疑使用你的代碼將創建兩個文件,但只有實際寫入一個。

如果擺脫零字節的文件是很重要的,你可以嘗試像:

log4net.GlobalContext.Properties["MyLogFileName"] = 
    (mode == BuySomeThing) ? "Log_BuySomething.txt" : "Log_SellSomeOtherThing.txt" ; 

XmlConfigurator.Configure(); 

您還需要更改配置文件中只能有一個附加器,並告訴它使用這個屬性爲文件名,例如

<appender name="FileAppender" type="log4net.Appender.FileAppender"> 
    <file type="log4net.Util.PatternString" value="Logfiles\%property{MyLogFileName}" /> 

    <appendToFile value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> 
    </layout> 
</appender> 

這應該最終只會創建一個文件。 (在這個例子中,它將在文件夾日誌文件中創建)。

+0

這是完美的。謝謝! – ViV