2011-12-17 18 views
2

私はメインシステムのスレッドでロギング時間を短縮するために、キューシステムとTimerを使用してLoggerを提供しようとしています。しかし、ログメッセージが書き込まれたときではなく、ログメッセージが作成された時刻を取得したいと思います。私はメッセージにタイムスタンプを追加することができましたが、パターンプロバイダを使って書かれたログメッセージをフォーマットできるように、log4netにタイムスタンプを提供するオプションが必要です。log4netの独自のタイムスタンプを提供する方法

タイムスタンプ値を指定することはできません。ロギングする前に簡単にメッセージパターンを書式設定する方法は素晴らしいでしょう。

例えば:

<param name="ConversionPattern" value="%d [%t] %-5p %c %m%n" /> 

- > 2011-12-17 00:00:38511 [TestRunnerThread] DEBUG GlobalLogger 12:00:38.411400 - ライン1

答えて

1

ときlog4net実装内部を見てみると、アペンダによってログを書き出すときではなく、LoggingEventのインスタンスを構築するときにタイムスタンプが作成されないことがわかります。 log4netの抽象Loggerクラスでは、DateTime.Nowに設定されたタイムスタンプを含む新しいLoggingEventインスタンスが作成されます。このタイムスタンプはアペンダーで使用できます。

+0

手動でタイムスタンプを割り当てるための理由があるが、私はキューイング・システムを実装したことです。キューイングシステムでは、ロギングイベントは現在の100msのタイマーを使用して行われます。待ち行列システムを使っていくつかのテストをした後、私はlog4netからのタイムスタンプと私が提供するタイムスタンプが200ms +になることを確認します。これは私が100msの違いを示す私のポストで与えた例で見ることができます。 – galford13x

+0

これは、最初にログメッセージをキューに入れていることを意味し、特定の時刻にlog4netにバッチを記録していますか?あなたはアペンダーを実装していませんか?アペンダのアプローチは、そのようなキューイングの実装のための「正しい方法」となるでしょう... – saintedlama

+0

ログメッセージがキューにある場合、特定の間隔でlog4netに追加するバッチロガーを実装しました。より良いアプローチのように聞こえるので、私は自分のアペンダーを作ることに目を通します。先端のおかげで何らかの理由で私はその道を辿ることができなかった。 – galford13x

4

これは今少し遅れるかもしれませんが、サンプルの非同期アペンダのコードhere

+2

リンクに記載されている情報を簡単に記入してください。将来リンクが壊れるかもしれませんが、あなたの答えはまだ役に立つかもしれません! –

+0

そして、それは...壊れています。 – Micke

関連する問題