0

基本的に、log4net用に次の構成があります。

<?xml version="1.0" encoding="utf-8"?>
<log4net>
  <root>
    <level value="INFO" />
    <appender-ref ref="RollingFileAppenderWithDeletion" />
  </root>
  <appender name="RollingFileAppenderWithDeletion" type="Namespace.RollingFileAppenderWithDeletion">
    <file type="log4net.Util.PatternString" value="Logs/%property{LogName}/log.%property{ServiceName}-PID-%processid_%date{yyyyMMdd}.log" />
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyyMMMdd" />
    <maxSizeRollBackups value="10" />
    <maximumFileSize value="50MB" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5level %date{dd MMM yyyy HH:mm:ss,ffff} [%thread] %exception - %message%newline"/>
    </layout>
  </appender>
</log4net>

今、私は問題を抱えています。log4net がログ ファイルをロールするたびに、ログ ファイルの日付部分は変更されません。たとえば、今日のログ ファイルがlog.MyServiceName-PID-1234_20131208.log の場合、明日ファイルをローリングした後、ファイルの名前は変更されないため、ロールバックされたログ ファイルとアクティブなログ ファイルは次のようになります。

  1. log.QAService-PID-17584_20131208.log
  2. log.QAService-PID-17584_20131208.log2013Dec08

私がしたいのは

  1. log.QAService-PID-17584_20131209.log - アクティブなログ ファイル
  2. log.QAService-PID-17584_20131208.log2013Dec08 - ロールバック

今、この投稿に出くわしましたが、役に立ちませんでした。特に、ファイルから日付パターンを削除し、preserveLogFileNameExtensiontrueに設定すると、アクティブなログ ファイルの日付部分が表示されなくなります。さらに進んでstaticLogFileNamefalseに設定すると、アクティブなログ ファイルがなくなり、代わりにアクティブなログ ファイルのログ ファイル名パターンがロールバックされます。

ここで何が欠けていますか?ロールバック後に正しいログ ファイル名を生成するにはどうすればよいですか。

log4net バージョン 1.2.10.0 を使用しています。残念ながら、新しいバージョンにアップグレードすることはできません。

更新 これは RollingFileAppenderWithDeletion のカスタム実装です。ログ ファイルのローリングが行われた後、古いロールバック ファイルをクリーンアップするだけです。

public class RollingFileAppenderWithDeletion :RollingFileAppender
    {
        private IFileBurner m_fileBurner;
        private const int checkMinutes = 1664;
        public RollingFileAppenderWithDeletion()
        {
            m_fileBurner = FileBurner.Instance;

        }

        protected override void AdjustFileBeforeAppend()
        {
            base.AdjustFileBeforeAppend();

            string path = base.File;
            string directoryPath = Path.GetDirectoryName(path);

            IDeletionRequirements requirements = new DeletionRequirements();
            requirements.CheckEveryMinutes = checkMinutes;
            requirements.DayLimit = MaxSizeRollBackups;
            requirements.Directories = new List<string> { directoryPath };

            m_fileBurner.ClearLogFiles(requirements);

        }
    }
4

1 に答える 1

0

タイプ Namespace.RollingAppenderWithDeletion を使用していますが、これは間違いなく標準のアペンダーではありません。タイプ log4net.Appender.RollingFileAppender を使用してみて、それが機能するかどうかを確認してください。カスタム アペンダーを使用するときは、コードを投稿するか、ファイル名コードが呼び出されない理由を見つける必要があります。

于 2013-12-10T06:56:33.250 に答える