0

複数の WCF サービス プロバイダー (バックグラウンドの Windows サービスでホストされている) によって使用されるエラー ログ ルーチンを作成しているため、キャッチした例外をログに記録できます。つまり、ルーチン内で例外をキャッチしたのがである場合、どうすればよいかわかりません。

より具体的には、これが私の現在のルーチンです(VB.Netで):

Public Shared Sub LogError(Text As String, Filename As String, PathLog As String)
    Try
        PathLog = Path.GetFullPath(PathLog)

        If Not Directory.Exists(PathLog) Then
            Directory.CreateDirectory(PathLog)
        End If

        Dim PathFile As String = Path.GetFullPath(PathLog & "\" & Filename)
        File.AppendAllText(PathFile, "[" & GetDateTimeWithMiliseconds() & "] " & vbNewLine & Text & vbNewLine)
    Catch ex As Exception
        'ToDo: WHAT TO DO?!
    End Try
End Sub

Try一般的な...を行うのではなく、おそらく例外を個別にキャッチする必要があることに気づきましたCatch。しかし、私のポイントは、それらを捕まえたらどうするかということです。

  1. Windows サービスでホストされている WCF サーバーであるため、MessageBox をスローできません (できたとしても、すべきではありません)。
  2. エラー ログ ルーチンが既に失敗しているため、エラーをログに記録できない可能性が高いです。

私は渋滞中です

PS: 外部ロギング ソリューションは論外です

4

1 に答える 1

0

この世界のすべてのプログラムには、「どうしようもない」と言わなければならないポイントがあります。そして、これはあなたがこれを言う方法です:

 Try
 .....
 Catch
    ''Do Nothing
 End Try

そのため、特別なロギングの失敗についてイベント ログに書き込むことができます。しかし、イベント ログが失敗した場合は、何もすることができず、上記のコードがそれを処理します。

具体的な例では、複数のスレッドが同じコードにアクセスし、ファイルがロックされてエラーが発生する可能性があるため、メソッドでロックを使用する必要があります。

SyncLock lockObject
       '' your code
End SyncLock 
于 2013-08-14T03:14:38.557 に答える