Чтобы узнать разницу между WriteEntry и Writeline, используйте Reflector или ILSpy и просмотрите детали, чтобы увидеть внутреннюю реализацию.System.Diagnostic.Trace.WriteLine:
Public Shared Sub WriteLine(ByVal value As Object)
If TraceInternal.UseGlobalLock Then
SyncLock TraceInternal.critSec
Dim listener As TraceListener
For Each listener In TraceInternal.Listeners
listener.WriteLine(value)
If TraceInternal.AutoFlush Then
listener.Flush
End If
Next
Return
End SyncLock
End If
Dim listener2 As TraceListener
For Each listener2 In TraceInternal.Listeners
If Not listener2.IsThreadSafe Then
SyncLock listener2
listener2.WriteLine(value)
If TraceInternal.AutoFlush Then
listener2.Flush
End If
Continue For
End SyncLock
End If
listener2.WriteLine(value)
If TraceInternal.AutoFlush Then
listener2.Flush
End If
Next
End Sub
My.Application.Log.WriteEntry - это просто синтаксис LOP, но он действительно указывает на пространство имен Microsoft.VisualBasic.Logging.Log.WriteEntry:
Public Sub WriteEntry(ByVal message As String, ByVal severity As TraceEventType, ByVal id As Integer)
If (message Is Nothing) Then
message = ""
End If
Me.m_TraceSource.TraceEvent(severity, id, message)
End Sub
Чтобы настроить его программно, вы можете сделать это:
Dim listener As New FileLogTraceListener()
listener.Location = LogFileLocation.TempDirectory
listener.BaseFileName = "ConsoleApp_"
listener.Append = True
listener.Delimiter = "|"
listener.AutoFlush = True
В общем случае вы сконфигурируете его в файле конфигурации:
<system.diagnostics>
<sources>
<source name="TestSrc">
<listeners>
<add name="FileLogger" type="Microsoft.VisualBasic.Logging.FileLogTraceListener,
Microsoft.VisualBasic,Version=8.0.0.0,Culture=Neutral, PublicKeyToken=b03f5f7f11d50a3a"/>
</listeners>
</source>
</sources>
</system.diagnostics>
Тогда выможно использовать это так:
Debug.Listeners.Add(listener)
Debug.WriteLine("Testing 1 2 3")