13

これが私のapp.configからの私のアペンダー構成です。これは、文字列を日付に変換するのではなく、文字列を出力するだけです(つまり、文字通り "[START:%date {MM / dd / yy HH:mm}]"を出力します)。

<appender name="RollingLogFileAppender"
          type="log4net.Appender.RollingFileAppender">
  <file value="C:\somelog" />
  <appendToFile value="true" />
  <rollingStyle value="Date" />
  <datePattern value="-yyyy-MM-dd'.txt'" />
  <layout type="log4net.Layout.PatternLayout">
    <header value="[START:  %date{MM/dd/yy HH:mm} ]&#13;&#10;" />
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - %message" />
    <footer value="[END]&#13;&#10;&#13;&#10;" />
  </layout>
</appender>

ヘッダーに日付/時刻を出力するにはどうすればよいですか?

4

4 に答える 4

21

ここから答えてください。

<layout type="log4net.Layout.DynamicPatternLayout">
  ...
  <header value="[BEGIN LOGGING AT %date]%newline"/>
  <footer value="[END LOGGING AT %date]%newline"/>
  ...
</layout>

私にとっては魅力のように機能します。コードを書く必要はありません。

また、私たちが通常使用するプロジェクトでは、次のようになります。

<header type="log4net.Util.PatternString" value="Our Application Name version %property{Assembly.Version}, .NET version %property{Runtime.Version}, %date ***%newline"/>

PatternStringのドキュメントもご覧ください。

また、最初のログステートメントを書き込むまでログファイルが表示されないことに気づきました。

于 2012-10-15T12:38:16.127 に答える
14

これを行う簡単な方法は、log4net.Layout.PatternLayoutヘッダーとフッターをサブクラス化してオーバーライドすることです。次に、ヘッダーに必要なものを追加できます:日付スタンプ、マシン名、ユーザー名、アセンブリバージョン、またはあなたの心が望むもの:

using System;
using log4net.Layout;

namespace MyAssembly
{
    class MyPatternLayout : PatternLayout
    {
        public override string Header
        {
            get
            {
                var dateString = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                return string.Format("[START:  {0} ]\r\n", dateString);
            }
        }
    }
}

この新しいクラスをアセンブリに含め、次のようにファイルで新しいタイプを使用します。

<layout type="MyAssembly.MyPatternLayout">
    <conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} - %message" />
</layout>

ヘッダーとフッターを上書きするので、ここに追加する必要はありません。ヘッダーは、アプリケーションが起動するたび、およびファイルがロールオーバーするたびに追加されます。

于 2010-01-05T21:45:08.257 に答える
3

@Wizouコメントに基づいています。DynamicPatternLayoutクラスのドキュメントを参照してください。

私は実際にこの動作の違いを使用して開始時間と終了時間を設定しています

PatternLayoutとDynamicPatternLayoutの重要な違いの1つは、構成内のヘッダーパラメーターとフッターパラメーターの処理です。DynamicPatternLayoutのHeaderパラメーターとFooterパラメーターは、構文的にPatternStringの形式である必要がありますが、タイプlog4net.Util.PatternStringとしてマークしないでください。そうすることで、構成時にパターンが静的に変換され、DynamicPatternLayoutがPatternLayoutと同じように実行されます。

ヘッダーのタイプをPatternStringに設定しますが、フッターは動的のままにします

<layout type="log4net.Layout.DynamicPatternLayout"> <param name="Header" value="%newline**** Trace Opened Local: %date{yyyy-MM-dd HH:mm:ss.fff} UTC: %utcdate{yyyy-MM-dd HH:mm:ss.fff} ****%newline" type="log4net.Util.PatternString" /> <param name="Footer" value="**** Trace Closed %date{yyyy-MM-dd HH:mm:ss.fff} ****%newline" /> </layout>

于 2017-10-21T20:36:11.083 に答える
1

この問題が発生しました。使用した簡単な回避策は、固定のヘッダーとフッターを使用することです。次に、ILogオブジェクトを取得したらすぐにこれを実行します。

log.Info(string.Format("[START: {0} ]\r\n", dateString))

したがって、ヘッダーのすぐ下に、必要な情報が表示されます。

例えば

===Start===
[START:  2012-02-23 12:12:12 ]

logs...
于 2012-02-23T00:37:05.917 に答える