如何使用垂直字段而不是水平列进行记录?

时间:2017-04-19 02:42:36

标签: logging nlog

我正在使用NLog.EventLog目标,并使用我希望以垂直字段格式记录事件的API。

它可能看起来像这样:

Method:  ServiceBase.Manager.StartService()
Message: The service started successfully.
Result:  The service is listening for requests.

这可能吗?

2 个答案:

答案 0 :(得分:1)

当然,这样的事情:

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

使用NLog.Fluent命名空间记录调用:

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

答案 1 :(得分:0)

根据朱利安的回答,我提出了这个问题:

- 配置方法 -

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

- 帮助者类 -

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

......产生这个:

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

它是newline布局的诀窍。

相关问题