19

これは非常によくある質問ですが、私は仕事に対する答えを得ることができませんでした. ここに私の設定ファイルがあります:

<?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
}

どうもありがとう!

4

2 に答える 2