我目前正在運行一個windows服務,它創建一個類的多個實例。類別的每個實例的唯一日誌文件
在服務類,並在我的解決方案所有其他類的頂部,我有這樣的事情:
private static readonly ILog _log = LogManager.GetLogger(typeof(SomeClassTypeHere));
在我的App.config,我log4net的配置爲單個文件:
<log4net debug="true">
<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
<file value="Logs\SomeLogFileName.xml" />
<appendToFile value="true" />
<rollingStyle value="Size" />
<countDirection value="1" />
<maxSizeRollBackups value="30" />
<maximumFileSize value="10MB" />
<staticLogFileName value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.XmlLayoutSchemaLog4j">
<locationInfo value="true" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="RollingFileAppender" />
</root>
</log4net>
這在大多數方面效果很好,並且所有內容都記錄到單個文件中。但是,我真的想爲我的服務創建的特定類的每個實例創建一個單獨的日誌文件。
這是一個我們經常需要監視支持的類,我們可以同時運行少數幾個實例。
我們不知道在給定的時間將運行哪些實例,所以它使得在配置中創建靜態文件有點痛苦。
我試圖起飛只讀修改和設置在類的構造函數如下:
_log = LogManager.GetLogger("DataCollectionClass_" + deviceName + "_" + DateTime.Now.ToString("MMddyyyy"), typeof(SomeClassTypeHere));
但是,這需要我在配置手動定義附加目的地,這將是繁瑣,很難跟上。
在L4N中做這件事的任何想法?我已經看到鏈接here,但不知道這個框架是否必要。
In如果代碼不明顯,名爲dev1的實例總是記錄到Device1.log,並且名爲dev2的實例記錄到Device2.log。代碼已經過測試,您應該可以將其複製到program.cs中一個新的控制檯項目文件來嘗試它 – dhochee 2011-06-01 16:09:31
這有幫助,謝謝! – Killnine 2011-06-07 13:18:10