疑难解答:日志侦听器 (Visual Basic)

可以使用 My.Application.LogMy.Log 对象来记录有关应用程序中所发生事件的信息。

若要确定接收这些消息的日志侦听器,请参阅演练:确定 My.Application.Log 写入信息的位置

Log 对象可以使用日志筛选来限制其记录的信息量。 如果筛选器配置错误,则日志可能包含错误信息。 有关筛选的详细信息,请参阅演练:筛选 My.Application.Log 输出

但是,如果日志配置不正确,则可能需要有关其当前配置的详细信息。 可通过日志的高级 TraceSource 属性获取此信息。

若要确定代码中日志对象的日志侦听器

  1. 在代码文件的开头导入 System.Diagnostics 命名空间。 有关详细信息,请参阅 Imports 语句(.NET 命名空间和类型)

    Imports System.Diagnostics
    
  2. 创建一个函数,该函数返回由每个日志侦听器的信息组成的字符串。

    Function GetListeners(ByVal listeners As TraceListenerCollection) As String
        Dim ret As String = ""
        For Each listener As TraceListener In listeners
            ret &= listener.Name
            Dim listenerType As Type = listener.GetType
            If listenerType Is GetType(DefaultTraceListener) Then
                Dim tmp As DefaultTraceListener =
                    DirectCast(listener, DefaultTraceListener)
                ret &= ": Writes to the debug output."
            ElseIf listenerType Is GetType(Logging.FileLogTraceListener) Then
                Dim tmp As Logging.FileLogTraceListener =
                    DirectCast(listener, Logging.FileLogTraceListener)
                ret &= ": Log filename: " & tmp.FullLogFileName
            ElseIf listenerType Is GetType(EventLogTraceListener) Then
                Dim tmp As EventLogTraceListener =
                    DirectCast(listener, EventLogTraceListener)
                ret &= ": Event log name: " & tmp.EventLog.Log
            ElseIf listenerType Is GetType(XmlWriterTraceListener) Then
                Dim tmp As Diagnostics.XmlWriterTraceListener =
                    DirectCast(listener, XmlWriterTraceListener)
                ret &= ": XML log"
            ElseIf listenerType Is GetType(ConsoleTraceListener) Then
                Dim tmp As ConsoleTraceListener =
                    DirectCast(listener, ConsoleTraceListener)
                ret &= ": Console log"
            ElseIf listenerType Is GetType(DelimitedListTraceListener) Then
                Dim tmp As DelimitedListTraceListener =
                    DirectCast(listener, DelimitedListTraceListener)
                ret &= ": Delimited log"
            Else
                ret &= ": Unhandled log type: " &
                    listenerType.ToString
            End If
            ret &= vbCrLf
        Next
    
        Return ret
    End Function
    
  3. 将日志跟踪侦听器的集合传递到 GetListeners 函数,并显示返回值。

    Dim ListenerCollection As TraceListenerCollection
    ListenerCollection = My.Application.Log.TraceSource.Listeners
    Dim ListenersText As String = GetListeners(ListenerCollection)
    MsgBox(ListenersText)
    

    有关详细信息,请参阅 TraceSource

请参阅