log4netでスタックトレースを記録する方法は?私は.netバージョンを使用しています。log4net(C#)を使用してスタックトレースを記録する方法
私が持っている方法はLog.Error(ex)です。
おかげ
log4netでスタックトレースを記録する方法は?私は.netバージョンを使用しています。log4net(C#)を使用してスタックトレースを記録する方法
私が持っている方法はLog.Error(ex)です。
おかげ
だけtry ... catch
exception
とロギングメソッドにその例外を与える:
try
{
// ... code that throws exception
}
catch (Exeption ex)
{
myLogger.Error(ex);
}
をこのオーバーロードは、暗黙のうちにあなたのログにコールスタックを印刷した例外のToStringメソッド()メソッドを呼び出します。
の2つの基本的な形式、明示的にオブジェクトと例外を取る1があります。
catch(Exception ex)
{
// the form that takes two args has an exception as second, prints trace...
_log.Error("My custom message", ex);
}
そして、任意のオブジェクトを受け取り、それにToString()
を行い、1:
catch(Exception ex)
{
// the form that takes one arg uses ToString()
_log.Error(ex);
}
前者はできますが、最初にログエントリにもっと意味のあるメッセージを添付して、必要な詳細を追加します。後者は仕事をするだけであなたを与えるToString()
を使用して、例外の詳細を出力します:
ToStringメソッドのデフォルトの実装では、呼び出しの結果を、メッセージを現在の例外をスローしたクラス の名前を取得します 内部例外のToStringと、 Environment.StackTraceを呼び出した結果。これらのメンバーのいずれかがNothingの場合、その値 は返された文字列に含まれません。
レイアウトパターンの定義が、必要な形式とデータを出力するように構造化されていることを確認する必要があります。ロギングイベントのスタックトレースを出力するために使用
スタックトレースレベル指定子は、括弧の間に囲まれていてもよいです。たとえば、%stacktrace {level}です。 type3.MethodCall3> type2.MethodCall2> type1.MethodCall1
このパターンは、コンパクトFrameworkアセンブリには使用できません:ないスタック・トレース・レベル指定子が指定されていない場合、1が仮定されている
出力フォーマットを使用します。
使用この:
void Error(object message,Exception t)
理由があるlog4netのドキュメントのvoid Error(object message)
用:このメソッドに例外を渡すと例外の名前が、ありませんスタックトレースを出力することを
警告に注意してください。スタックトレースを印刷するには、代わりに
void Error(object,Exception)
フォームを使用します。それは例外ではなくオブジェクトとして移行し、それは(というよりも、文字列を検索することによって特定の例外クラスにログを狭くするアペンダに使用することができるので
Error(object message, Exception t)
は例外データを記録する最も柔軟な方法でありますはるかに遅いとあまり一貫性のある)
メッセージと例外を取るすべての非形式のロギング方法の特別なバージョンがあります。
namespace log4net
{
public interface ILog
{
...
/* Log a message object and exception */
void Debug(object message, Exception t);
void Info(object message, Exception t);
void Warn(object message, Exception t);
void Error(object message, Exception t);
void Fatal(object message, Exception t);
...
}
}
は、あなたは彼とだけ例外をログに記録する方法を持っているのILogを拡張することができますスタックトレース。
public static void ErrorWithStackTrace(this ILog log, Exception exception)
{
log.Error(exception.Message,exception);
}
Log.Error(ex)の出力に特に問題がありますか? –