【问题标题】:How can I see the MessageTemplate when using Serilog WriteTo.Console?使用 Serilog WriteTo.Console 时如何查看 MessageTemplate?
【发布时间】:2021-12-02 08:37:36
【问题描述】:

我使用 Serilog 进行日志记录,并使用控制台编写器将日志发送到标准输出,以便由 Filebeat 拾取并发送到 Elastic。记录器的配置包括以下内容:

.WriteTo.Console(outputTemplate: "[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{Properties:j}{NewLine}{Exception}")

这很好,结构化属性以 JSON 格式正确输出和呈现,但是,它缺少 MessageTemplate 属性值,该值会输出类似于:

"MessageTemplate":"User {Username} logged in successfully"

这是一个问题,因为能够在 Kibana 中运行查询以通过搜索消息模板而不是呈现的特定于单个用户的消息来显示用户登录的次数会很有用,例如:

"Message":"User "Joe Bloggs" logged in successfully"

我可以看到我可以使用 JsonFormatter 对象写入控制台:

.WriteTo.Console(new JsonFormatter(renderMessage: true))

使用此方法会同时输出 Message 和 MessageTemplate 属性,但它是在一个丑陋的 JSON 块中输出的,当人们在命令行上查看日志时真的很难阅读。

有谁知道 Serilog 控制台输出模板是否可以包含 MessageTemplate?

【问题讨论】:

    标签: c# serilog


    【解决方案1】:

    Serilog.Expressions 可以做到这一点。

    dotnet add package Serilog.Expressions
    

    然后:

      .WriteTo.Console(new ExpressionTemplate(
        "[{@t:HH:mm:ss} {@l:u3}] {@m} { {..@p, MessageTemplate: @mt} }\n{@x}"))
    

    【讨论】:

    • 正确,谢谢@Nicholas Blumhardt :)
    • 太棒了 :-) - 不客气!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2014-07-01
    • 2019-02-27
    • 1970-01-01
    相关资源
    最近更新 更多