2017-04-19 1 views

Répondre

1

Bien sûr, quelque chose comme ceci:

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

appel d'enregistrement, en utilisant l'espace de noms NLog.Fluent:

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

Excellent! C'est cette disposition 'NewLine' qui est la clé. Je voulais m'arrêter un peu sur la verbosité de l'appel de journalisation, donc j'ai juste utilisé la mise en page dans ma configuration initiale. Voir ma réponse alternative pour le code. – InteXX

+0

Néanmoins, il est bon de connaître la disposition 'event-properties'. Je serai en mesure de faire bon usage de cela sur la route. Et la syntaxe couramment utilisée. Merci. – InteXX

0

Sur la base de la réponse de Julien, je suis venu à ceci:

--Configuration Method--

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 

... qui produit ceci:

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

Il est la mise en page newline qui fait l'affaire.