16


1

log4netはいつログをファイルに書き込みまたはコミットしますか?

log4netを使用して、winformアプリケーションのイベントとエラーを記録します。 お客様は、アプリケーションの実行中にログファイルを確認したいと考えています。 しかし、log4netがいつ(どのように)書き込み(コミット)操作を行うのかわかりません。 そして、自分で別のロガーを作成することを除いて、顧客の要件を満たす方法。 何か手助け? ありがとう。

4 Answer


9


http://logging.apache.org/log4net/release/sdk/log4net.Appender.FileAppender.html [FileAppender]を使用している場合、このアペンダーはhttp://logging.apache.org/log4netを継承します/release/sdk/log4net.Appender.TextWriterAppender.html [TextWriterAppender]は、http://logging.apache.org/log4net/release/sdk/log4net.Appender.TextWriterAppender.ImmediateFlush.html [を順に公開しますImmediateFlush]プロパティ。 このプロパティの値はデフォルトで true`であり、アペンダーは各Append操作の基になるストリームで Flush() `を強制的に実行します。

顧客がログファイルを「監視」する方法に応じて、アプリケーション内から監視を有効にすることが考えられます。 これは、http://logging.apache.org/log4net/release/sdk/log4net.Appender.MemoryAppender.html [MemoryAppender]を使用してファイルに追加し、そのアペンダーからイベントを読み取ることで実行できます。


1


SharePointインスタンスでlog4netを使用していたときに気付いたことの1つは、セキュリティ構成と構成の読み込みの実装によっては、アプリケーションプールを起動するユーザーがローカルファイルシステムに書き込む権限を持たない可能性があることです。ログファイルを作成します。

このため、正しい資格情報を使用して構成が呼び出されることを確認する必要があります。SharePointでは、高度なセキュリティコンテキストになります。 完全に関連しているわけではありませんが、遭遇する問題である可能性があります。


0


log4netログをプログラムでフラッシュする方法については、https://stackoverflow.com/a/2045992/424963 [this] SO投稿を参照してください。 ジョーの答えはわずかに不正確ですが、ほぼ同じコードであるため、おそらくすべてのバッファーアペンダーをフラッシュするのに役立つでしょう。


-1


ログファイルについて話すので、おそらくFileAppenderまたは派生クラスを使用しています。 これはデフォルトで出力をバッファリングします。 バッファリングされた出力ははるかに効率的であるため、要件を満たすために、各書き込み操作後にコミットを強制するのではなく、ログを表示する前にフラッシュするメカニズムを提供することをお勧めします。

これは、次のようなコードで実行できます。

foreach (IAppender appender in LogManager.GetRepository().GetAppenders())
{
    BufferingAppenderSkeleton b = appender as BufferingAppenderSkeleton;
    if (b != null) b.Flush();
}