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. 我不能抛出 MessageBox,因为它是 Windows 服务托管的 WCF 服务器(即使我可以,我也不应该)
  2. 我很可能无法记录错误,因为错误记录例程已经失败

我陷入困境

PS:外部日志记录解决方案是不可能的

4

1 回答 1

0

这个世界上的每个程序都有一个点,你不得不说,“我对此无能为力”。这就是你所说的:

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

因此,您可能希望将您的特殊日志记录失败写入事件日志。但是,如果事件日志失败,您将无能为力,上面的代码会解决这个问题。

在您的具体示例中,您应该在方法中使用锁,因为多个线程可能访问相同的代码并且文件可能被锁定,这将导致错误。

SyncLock lockObject
       '' your code
End SyncLock 
于 2013-08-14T03:14:38.557 回答