5

これは私の log4net 構成です。ロールオーバー ログ ファイルは間違った拡張子で作成されます。最初のファイルは log_debug.txt という名前で作成され、ロールオーバー ファイルは log_debug.txt.1 で作成されます。しかし理想的には、log_debug.1.txt であるべきです。

preserveLogFileNameExtension 値を true に使用しましたが、機能していないようです。確認して、何か問題があれば教えていただけますか?

<appender name="DebugRollingFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
    <filter type="log4net.Filter.LevelRangeFilter">
      <levelMin value="DEBUG" />
      <levelMax value="DEBUG" />
    </filter>
    <file value=".\logs\log_debug.txt" />
    <appendToFile value="true" />
    <rollingStyle value="Size" />
    <maxSizeRollBackups value="20" />
    <maximumFileSize value="2MB" />
    <preserveLogFileNameExtension value="true" />
    <staticLogFileName value="true" />
    <layout type="propertyPatternLayout">
      <conversionPattern value="%date || Thread=%thread" />
    </layout>
    <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  </appender>

4

1 に答える 1

3

私の最初の回答 (以下) は、log4net の v1.2.10 に基づいてましたpreserveLogFileNameExtension。一部のテストでは、プロパティも意図したとおりに機能し、プロパティに依存していないことが確認されましたstaticLogFilename

OPはプロパティを含まない以前のバージョンのlog4netを使用しているため、以下に説明する動作を示していると思います(make3とSivakumarのコメントはその場でIMOにあります)

1.2.10 の溝から目覚めさせてくれてありがとう。


最初の答え

最初に最初に:バニラ log4net (バージョン 1.2.10.0 を見ています) には (または任意preserveLogFileNameExtensionのアペンダー) のプロパティはありません。RollingFileAppenderほとんどの log4net コンポーネントは、文句を言わずに送信されたプロパティ構成を消費しますが、必ずしもコンポーネントの動作に変換されるとは限りません


サイズ (またはコンポジット) でロールする場合、ログ ファイルの末尾に反復番号を付けるためにロール オーバーがハードコードされます。n が次のファイル番号に一致する "file.log.n" が常に取得されます (これはmaxSizeRollBackupsとのcountDirection値によって異なります)。現在の方法ではこれを避けることはできませんRollingFileAppender(方法を見てくださいRollingFileAppender.RollOverRenameFiles) 。

何をすべきか?日付ごとにロールすることを決定できます。この場合、datePatternプロパティを使用することができます。ローリング時にファイル名に が追加されるので、次のdatePatternようなものを使用できます

<file value="file.log" />
<datePattern value=".yyyy-MM-dd-hh-mm-ss'.log'" />

これにより、拡張子が保持され、次のようなファイルが作成されますfile.log.2014-12-11-11-47-54.log(ファイル名の元の .log 拡張子を参照してください)。ただし、サイズ制限の側面が失われています。コンポジットを選択すると、同じ問題が発生します。番号プレフィックスが存在RollOverSizeする後に常に発生するためです。RollOverDate

必要な/必要な命名規則を使用して、独自のアペンダーを展開することもできます。バニラから継承して、RollingFileAppender必要なメソッドのみをオーバーライドすることもできます。AdjustFileBeforeAppend仮想であり、すべてのロールオーバー ニーズの開始点です。たとえば、呼び出しを逆にして、複合モードを使用することができRollOverDateますRollOverSize...

于 2014-12-11T10:54:29.490 に答える