これは非常によくある質問ですが、私は仕事に対する答えを得ることができませんでした. ここに私の設定ファイルがあります:
<?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>
しかし、実行時に実際のログ ファイル名を特定する必要があります。ここで良い例を見つけましたが、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
}
どうもありがとう!