私たちは内部で開発されたロギングシステムを使用しており、複数のアペンダを同時に使用できるなど、log4netの利点を得たかったのです。従来のログシステムをカスタムlog4netアペンダに移行することにしました。レガシーシステムが正しく設定されていてもレガシーロガーが実際にWCFクライアントに書き込むときにはうまくいきました(冗長なロギングが遅くなり、他のlog4netアペンダーとやりたい理由)。になるはずだった。これが起こったとき、アプリケーションは正常に動作したように見えましたが、レガシーシステムのカスタムアペンダーは動作していませんでした。他のアペンダーは正常に動作しましたが、カスタムレガシーアペンダーの出力はなく、問題があることを示すエラーメッセージも表示されませんでした。カスタムlog4netアペンダ内でのロギング/エラー処理
「再帰的」ロギングを処理する適切な方法は何ですか?つまり、カスタムlog4netアペンダからのログです。私は素朴な解決策を試してみました:アペンダ内部の静的オブジェクトおよびログからのグラブにlog4net:
public class MyCustomAppender : AppenderSkeleton
{
protected override void Append(log4net.Core.LoggingEvent loggingEvent)
{
try
{
// something which throws here...
}
catch (Exception ex)
{
log4net.LogManager.GetLogger(this.GetType()).Error(this.GetType().ToString() + ": error during append", ex);
}
}
}
これは惨めな失敗だった「System.Threading.LockRecursionException:このモードでは使用できません再帰的な読み取りロックの獲得」けっこうだ;それは素朴な解決策でした。
は、私も試してみました:例外ハンドラで
this.ErrorHandler.Error(this.GetType().ToString() + ": error during append", ex);
、それが可能に見えたとして、それは正しいことかもしれません。何も明らかに起こらなかった。
appender内のlog4netでエラーを記録する方法はありますか?または、Windowsイベントログに直接ハードコードを書き込むような何かをしなければならないのですか?明らかに、無限の再帰的な降下の大きな危険がありますが、私は、オペレータが実行できなかったアペンダの1つを知らせる何らかの方法があると思います。
JR
元の問題は何かを忘れていましたが、私の主張はカスタムlog4netアペンダーを実行時にlog4netメカニズムにログインさせることでした。私が知る限り、 "using"ステートメントはコンパイル時にのみ修正します。コンパイルの問題は全くありませんでした。私は実行時に何がうまくいかないかを知る必要がありました。 – jrv