2017-04-19 3 views

Antwort

1

Sicher, so etwas wie dieses:

<target name="file" xsi:type="File" 
     layout="Method: ${callsite} ${newline}Message: ${message} ${newline}Result: ${event-properties:result}" 
     fileName="${basedir}/${level}.log" /> 

Logging Aufruf, mit NLog.Fluent Namespace:

logger.Info().Message("The service started successfully.") 
      .Property("result", The service is listening for requests.") 
      .Write(); 
+0

Ausgezeichnet! Es ist das 'NewLine'-Layout, das der Schlüssel ist. Ich wollte etwas über die Ausführlichkeit des Protokollierungsaufrufs berichten, also habe ich das Layout in meiner ursprünglichen Konfiguration verwendet. Siehe meine alternative Antwort für den Code. – InteXX

+0

Nichtsdestotrotz ist es gut über das 'event-properties' Layout zu wissen. Ich werde das auf der Straße gut ausnutzen können. Und die fließende Syntax auch. Vielen Dank. – InteXX

0

Basierend auf Julian Antwort, ich habe mit diesem kommen:

- Konfigurationsmethode -

Protected Sub ConfigureLogging(ServiceName As String) 
    Dim oBuilder As StringBuilder 
    Dim oConfig As LoggingConfiguration 
    Dim oTarget As EventLogTarget 
    Dim oRule As LoggingRule 

    oBuilder = New StringBuilder 
    oBuilder.Append($"Method:{vbTab}{vbTab}{Layouts.CallSite}(){Layouts.NewLine}") 
    oBuilder.Append($"Level:{vbTab}{vbTab}{Layouts.Level}{Layouts.NewLine}") 
    oBuilder.Append($"Message:{vbTab}{Layouts.Message}{Layouts.NewLine}") 

    oTarget = New EventLogTarget("EventLog") 
    oTarget.Layout = oBuilder.ToString 
    oTarget.Source = ServiceName 

    oRule = New LoggingRule("*", LogLevel.Debug, oTarget) 

    oConfig = New LoggingConfiguration 
    oConfig.AddTarget(oTarget) 
    oConfig.LoggingRules.Add(oRule) 

    LogManager.Configuration = oConfig 

    Me.Logger = LogManager.GetLogger(ServiceName) 
End Sub 

--Helper Class--

Public Class Layouts 
    Public Sub New(Layouts As List(Of String)) 
    Me.Layouts = Layouts 
    End Sub 

    Shared Sub New() 
    _CallSite = "${callsite}" 
    _Message = "${message}" 
    _NewLine = "${newline}" 
    End Sub 

    Public Overrides Function ToString() As String 
    Return Join(Me.Layouts.ToArray, "|") 
    End Function 

    Private Layouts As List(Of String) 

    ''' <summary> 
    ''' The call site (class name, method name and source information). 
    ''' </summary> 
    Public Shared ReadOnly Property CallSite As String 

    ''' <summary> 
    ''' The formatted log message. 
    ''' </summary> 
    Public Shared ReadOnly Property Message As String 

    ''' <summary> 
    ''' A newline literal. 
    ''' </summary> 
    Public Shared ReadOnly Property NewLine As String 
End Class 

..., die dieser erzeugt:

Method:  ServiceBase.Manager.StartService() 
Level:  Info 
Message: Service started 

Es ist das newline Layout, das der Trick funktioniert.

Verwandte Themen