2

我对我现在使用的当前日志记录解决方案非常满意,它是由 NLOG 实现的 ServiceStack 接口。我使用的 NLOG 目标如下:

xsi:type="控制台"

xsi:type="调试器"

xsi:type="文件"

xsi:type="序列"

特别重要的是Seq,它是类固醇的日志接收器,是我的生命线,可以实时了解我的服务发生的事情。查询结构化日志的能力非常棒,以至于现在我想查询 Seq 日志以查找具有相同相关 ID 的所有消息,根据这篇文章,这可以通过丰富器实现:

using (LogContext.PushProperty("MessageId", GetCurrentMessageId()))
{
  Log.Information("Processing {OrderId}", message.Order.Id); 

  // Later
  Log.Information("Order processing complete");
} 

<target name="seq" xsi:type="Seq" serverUrl="http://localhost:5341">
  <property name="CallSite" value="${callsite}" />
  <property name="Logger" value="${logger}" />
  <property name="MachineName" value="${machinename}" />
  <property name="ThreadId" value="${threadid}" as="number" />

  <!-- would like to add the correlationId to the nlog properties here -->

</target>

使用 ServiceStack 接口,我看不到这样做的方法,而是必须通过使每个日志语句在消息中包含相关性 ID 来伪复制它。ie _log.Warn("CorrelationId:{0} Campaign => no trackingId found".Fmt(request.CorrelationId));

是否可以让correlationId 成为一等公民/财产,以便Seq 让我通过它查询?

基于@paaschpas 答案的更新

鉴于如果您在记录器接口上使用 xxxxFormat 方法(非常重要),您现在可以使用它并在序数位置提供参数(有点脆弱),例如

if (_log.IsDebugEnabled)
    _log.DebugFormat("CorrelationId:{0} CallReceived request:{1}", msgId, request.Dump());

这将按 corrId 过滤的 Seq在一天结束时给你这个,我的朋友们足以满足我的需要。

4

2 回答 2

3

是否可以让correlationId 成为一等公民/财产,以便Seq 让我通过它查询?

据此,指出“您不能在 NLog 消息中使用命名属性在 Seq 中进行查询,@0 和 @1 占位符可用于查询以识别格式字符串中 {0} 和 {1} 的参数。 " 因此,如果您使用您的伪复制_log.Warn("CorrelationId:{0} Campaign => no trackingId found".Fmt(request.CorrelationId));或 ServiceStack log.WarnFormat("correlationid {0}", "correlationid");,您可以使用查询/过滤@0 == "correlationid"

使用 ServiceStack 接口,我看不到这样做的方法......

由于 ServiceStack 只是调用NLog.LogManager.GetLogger(typeName)并且 NLog 似乎没有提供任何接口,LogContext.PushProperty我认为唯一的选择是通过参数查询 {0}、{1}、{2}...等。

于 2015-02-10T19:25:44.340 回答
1

ServiceStack 现在支持 PushProperty for NLog (MDLC) + Log4net + Serilog:

using (log.PushProperty("Hello", "World"))
{
    log.InfoFormat("Message");
}

https://docs.servicestack.net/logging#logging-with-context

此功能从 ServiceStack v5.1.0 开始可用

NLog 4.5 还引入了与新的NLog.Targets.Seq一起工作的结构化日志记录

于 2018-12-30T21:11:56.673 回答