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

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

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

Log 对象可以使用日志筛选来限制它所记录的信息量。 如果筛选配置不正确,则日志可能包含错误的信息。 有关筛选的更多信息,请参见 演练:筛选 My.Application.Log 输出 (Visual Basic)

但是,如果日志配置不正确,则可能需要有关其当前配置的更多信息。 可以通过日志的 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 &= ": Unhandeled 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

请参见

任务

演练:确定 My.Application.Log 写入信息的位置 (Visual Basic)

参考

Microsoft.VisualBasic.Logging.Log

概念

使用 Application 日志 (Visual Basic)