如何使用ServiceStack.Logging ILog记录消息相关ID?

时间:2015-02-10 05:37:31

标签: logging servicestack nlog serilog getseq

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

的xsi:type = “控制台”

的xsi:type = “调试器”

的xsi:type = “文件”

的xsi:type = “SEQ”

特别重要的是Seq这是类固醇的日志接收器,也是我的服务实时发生的生命线。查询结构化日志的能力绝对太棒了,现在我想查询Seq日志,查找具有相同相关ID的所有消息,根据this post可以使用更丰富的内容:

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接口,我没有看到这样做的方法,而是必须通过使每个日志语句在消息中包含correlationId来伪复制它。即_log.Warn(“CorrelationId:{0} Campaign =&gt;未找到trackingId”.Fmt(request.CorrelationId));

是否可以将correlationId作为头等公民/财产,以便Seq让我通过它进行查询?

根据@paaschpas回复

进行更新

如果你在记录器界面上使用xxxxFormat方法(非常重要),你现在可以使用它并在顺序位置提供参数(一类脆弱的),例如:

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

这将在一天结束时给你Seq filtered by corrId,并且我的朋友对我的需求足够好。

2 个答案:

答案 0 :(得分:3)

是否可以将correlationId作为头等公民/财产,以便Seq让我通过它进行查询?

根据this,它声明“你不能在你的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} ...等等。

答案 1 :(得分:1)

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

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

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

此功能自ServiceStack v5.1.0起可用

NLog 4.5还引入了structured logging和新的NLog.Targets.Seq