2

私は話しているTry ... Catch ex as Exception .... End Try

Error Logger に例外を渡す場合、例外オブジェクト (例) または を渡す必要がありますかex.ToString? を渡すと情報が失われex.ToStringますか?

基本的に、ex.ToString は ex をオブジェクトとして渡すのとまったく同じであるべきだとマネージャーと議論していました。MI 間違っているか正しいか?

4

4 に答える 4

6

1 つは例外オブジェクトで、もう 1 つは例外オブジェクトを呼び出しToStringた結果の文字列です。

それらは異なるタイプであり、異なる情報を持っています。

ToStringロギングの目的では、ロガーは通常例外オブジェクトを呼び出すため、ほとんど違いはありません。

ToStringただし、これを一元化することをお勧めします。ロガーへのすべての呼び出しサイトでこれを行うのではなく、例外ロガー呼び出しを行います。より保守しやすく、必要に応じて将来的に例外を除いて、より多くのことを行うことができます。

于 2012-10-12T14:58:11.550 に答える
4

例外オブジェクトは.ToString()、オブジェクト自体の呼び出しとは異なります。それは、例外自体についてどの程度の情報を取得したいかによって異なります。メッセージだけが必要な場合は、呼び出し.ToString()で十分です。これは、例外オブジェクトからメッセージ プロパティを取得することになるためです。MSDN サイトには、基本例外クラスに属するさまざまなプロパティが一覧表示されています。これらのプロパティのいずれかをログに記録する場合は、メッセージ文字列だけでなく、例外クラスが必要になります。

また、基本例外クラスを継承するさまざまなクラスが追加情報を提供することにも注意してください。例として、HttpException クラスは追加のプロパティを提供します。その情報は、トラブルシューティングのために何を確認する必要があるかによって役立ちます。

于 2012-10-12T14:57:43.953 に答える
1

exceptionオブジェクトには、 の結果よりも多くの情報が含まれます.ToString()。少なくとも、その情報はより有用な形式になります (つまり、個々の部分を簡単に取得できます)。

ロガーで行うことは、exception.ToString()他に何も使用せずに呼び出すだけの場合、現在のところ、実際の違いはありません。ただし、例外オブジェクトを渡すことは、将来の証明のためにおそらく優れています (つまり、例外のプロパティがさらに必要になった場合)。

その価値があるのは、次のオーバーロードをパラメーターとしてToString渡すことです。true

Private Function ToString(ByVal needFileLineInfo As Boolean) As String
    Dim className As String
    Dim message As String = Me.Message
    If ((message Is Nothing) OrElse (message.Length <= 0)) Then
        className = Me.GetClassName
    Else
        className = (Me.GetClassName & ": " & message)
    End If
    If (Not Me._innerException Is Nothing) Then
        className = String.Concat(New String() { className, " ---> ", Me._innerException.ToString(needFileLineInfo), Environment.NewLine, "   ", Environment.GetRuntimeResourceString("Exception_EndOfInnerExceptionStack") })
    End If
    Dim stackTrace As String = Me.GetStackTrace(needFileLineInfo)
    If (Not stackTrace Is Nothing) Then
        className = (className & Environment.NewLine & stackTrace)
    End If
    Return className
End Function

ご覧のとおり、基本的にクラス、メッセージ、innerexception.ToString()、およびスタック トレースを出力します。

于 2012-10-12T15:00:20.580 に答える
0

例外オブジェクトは.ToString()とは異なります。さまざまなプロパティがあり、メッセージのみを渡す必要がある場合は、次を使用できます。Ex.Message;

于 2012-10-12T15:00:34.447 に答える