10

ローリング ファイルの先頭にヘッダー情報のみを含めることはできますか?

次の構成ファイルがあります。

<appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
            <file value="d:\temp\TTTest.log"/>
            <layout type="log4net.Layout.PatternLayout">
                <header value="[Header]&#13;&#10;" />
                <param name="ConversionPattern" value="%-25utcdate{dd/MM/yyyy HH:mm:ss.fff}%-20property{log4net:HostName}%-30logger%-30thread%-7level%message%newline"/>
            </layout>
            <lockingModel type="log4net.Appender.FileAppender+MinimalLock"/>
            <maximumFileSize value="5MB"/>
            <rollingStyle value="Size"/>
            <maxSizeRollBackups value="-1"/>
            <countDirection value="1"/>
        </appender>

たとえば、アプリケーションを 2 回実行すると、ヘッダー情報が 2 回取得されます。

 [Header] 
 The Log line
 [Header]
 The Log line 
 etc

私は次のことを達成しようとしています:

 [Header] 
 The Log line
 The Log line 
 etc
4

3 に答える 3

15

これを行う最も簡単な方法は、RollingFileAppender から継承し、このように WriteHeader メソッドを上書きするクラスを作成することです。

using System.IO;
using System.Text;
using log4net.Core;
using log4net.Layout;
using log4net.Util;
using log4net.Appender;

namespace CsvLogging
{
    public class HeaderOnceAppender : RollingFileAppender 
    {
        protected override void WriteHeader()
        {
            try
            {
                if (LockingModel.AcquireLock().Length == 0)
                {
                    base.WriteHeader();
                }
            }
            finally
            {
                LockingModel.ReleaseLock();
            }
        }
    }
}

次に、このクラスをアペンダーとして使用します。

<appender name="CsvFileAppender" type="CsvLogging.HeaderOnceAppender">
于 2013-09-12T17:08:04.107 に答える
3

log4net.Layout.PatternLayout の具体的な実装を作成します。

namespace MyApplication
{
    using log4net.Layout;

    public class MyConcretePatternLayout : PatternLayout
    {
        public override string Header => "My Header text here"
    }
}

この新しいカスタム パターン レイアウトを使用するように log4net.config ファイルを変更します。

    <appender name="MyFileAppender" type="log4net.Appender.RollingFileAppender">
      ...
      <layout type="MyApplication.MyConcretePatternLayout">
        <conversionPattern...
      </layout>

    </appender>

これで、ファイルが基準に従ってロールされるたびに、各ファイルの上部に「My Header text here」が表示されます。

于 2016-03-17T22:38:15.153 に答える
0

RollingFileAppender から継承するカスタム アペンダーが必要です。以下の投稿を参照してください。

Log4net - ファイルがいつロールされるかを知る方法は?

基本的に、カスタム アペンダーで独自のロジックを提供して、新しい各ファイルにヘッダーを書き込む必要があります。おそらくRollOverSizeでこれを行うでしょう。参照用に log4net ソース コードのコピーを取得することをお勧めします。

于 2012-06-29T15:34:03.663 に答える