1

私のチームは、C# ASP.NET Web アプリケーションに取り組んでいます。エラーログファイルに書き込むことでエラーを処理することにしました。

私が作成した log.Error メソッドは、エラー ディレクトリ内の物理ログ ファイルにログを記録します。

エラーが発生するたびにログに記録したいので、log.Errorメソッドの実行に関しては、ロックを使用してスレッドを制御するのが適切であると考えました。

したがって、私の例外処理のほとんどの形式は次のとおりです。

protected void blahblahCsharpMethodBlahBlah()
{
try
{
    blah blah C# code blah blah
}
catch(Exception ex  ){
    lock (_objectblahblahCsharpMethodBlahBlah)
    {
        // The following log.Error method that I wrote would log to a physical log file in an error directory.
        log.Error(ex.ToString(),
                  PerlsPivotErrorDirectory,
                  System.Reflection.MethodBase.GetCurrentMethod().Name,
                  this.GetType().Name,    System.IO.Path.GetFileName(System.Reflection.Assembly.GetExecutingAssembly().Location));
}
}
} // protected void blahblahCsharpMethodBlahBlah()

スレッドを制御するためにロックを使用して、適切なシリアル化された方法で log.Error メソッドを実行するのは適切な方法ですか?

4

1 に答える 1

4

スレッドセーフを確保したい場合は、ロックを使用する必要があります。しかし、より簡単に使用できるようにするために、Error メソッド内でロックします。通常、アプリケーション内の異なるクラス間で同じログ オブジェクト (または少なくとも同じログ ファイル) を共有するため、ロギング (ここではエラー) 関数に直接ログインする方が理にかなっています。

しかし、車輪を再発明したくない、または再発明する必要はありません。デフォルトでスレッドセーフなNLogを使用します。

于 2012-09-24T21:50:36.203 に答える