這是一個很常見的問題,但我一直無法獲得工作答案。這裏是我的配置文件: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
}
非常感謝!
儘管讀了兩次,我不知道你爲什麼會想這樣做。 –
這是用於將在退火工廠的起重機的駕駛室內的筆記本電腦。該工廠有3臺起重機。由於我不在工廠,也不會在不久的將來,我有一臺假裝爲三臺起重機的模擬器。這個程序將會同時運行3個實例。我需要分別跟蹤三臺起重機的事件,並且可能應該避免同時將該程序的兩個實例寫入同一個日誌文件。 –
我覺得我的直覺是正確的。你正試圖解決錯誤的問題。 –