【问题标题】:Serilog machine name enricher for rolling file sink用于滚动文件接收器的 Serilog 机器名称丰富器
【发布时间】:2014-06-12 11:29:08
【问题描述】:

我正在尝试结合滚动文件接收器和 Loggly 接收器使用几个丰富器(现在是机器名称和线程 ID)。虽然 Loggly 事件正确包含机器名称和线程 ID 属性,但我在滚动文件事件中看不到这些。

这是我的 xml/代码配置:

<add key="serilog:minimum-level" value="Information" /> 
<add key="serilog:write-to:RollingFile.pathFormat" value="C:\Foo\bar-{Date}.txt" />
<add key="serilog:using" value="Serilog.Sinks.Loggly" />
<add key="serilog:write-to:Loggly.inputKey" value="redacted Loggly key" /> 

new LoggerConfiguration()
    .ReadAppSettings()
    .Enrich.WithMachineName()
    .Enrich.WithThreadId()
    .CreateLogger()

有人设法做到这一点吗?这种行为可能是设计使然,还是滚动文件接收器不支持这些丰富器?

【问题讨论】:

    标签: c# logging serilog rollingfilesink


    【解决方案1】:

    machinename 和 threadid 作为属性添加到所有日志事件中。它们不在消息格式中,因此 serilog 不会将它们转换为文本表示。 然而,它们将被发送到接收器。 Loggly 接收器将选择所有属性(包括线程 id 等)并将它们转换为 Loggly 可以理解的内容(因为它可以接受任何类型的数据)。

    如果您希望 RollingFile 接收器也输出机器名称等,您需要调整输出模板。因此将其设置为例如:

    outputTemplate: "{Timestamp:HH:mm} [{Level}] {MachineName} ({ThreadId}) {Message}{NewLine}{Exception}"
    

    另见https://github.com/serilog/serilog/wiki/Configuration-Basics#enrichers

    由于滚动文件接收器无法输出所有属性,因此您只能获得默认不包含这些属性的渲染消息。

    【讨论】:

    • 这很有意义。我想我仍然在从经典日志记录过渡到这种“对象日志记录”概念。
    • RollingFile sink 是一种快速输出内容的方法,真正的威力在于将其存储到 Seq、ElasticSearch 或一些在线日志提供程序(如 Loggly)中。然后您可以访问所有元数据、进行分析、搜索等。
    • 是的,我们也在使用 Loggly,但它似乎有点慢且难以设置,因此您可以快速找到您要查找的内容。
    • 试试 SEQ getseq.net 它将接收所有属性并具有良好的搜索和警报功能。它来自 Serilog 的同一作者。
    • 机器名是客户端机器名还是主机服务器机器名?
    【解决方案2】:

    如果您没有看到这样的丰富添加的属性

    .Enrich.WithProperty("Assembly", assemblyName.Name)
    

    问题可能出在@Michel 建议的 outputTemplated 上。您需要为此添加一个 outputTemplate。

    另一种添加输出模板的方法是添加格式化程序。 首先安装Serilog.Formatting.Compact。然后你必须指定一个格式化程序。 我在 appsettings 中使用的格式化程序如下。

    "Serilog": {
      "WriteTo": [
        {
          "Name": "Seq",
          "Args": {
            "serverUrl": "http://localhost:5341",
            "formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog"
          }
        }
      ]
    },
    

    您看到的 JsonFormatter 是我们在 nuget 中可用的格式化程序。 现在我所有的浓缩器都在工作,没有任何 outputTemplate 任何地方。

    有关详细信息,请参阅以下页面。 https://github.com/serilog/serilog/wiki/Formatting-Output

    【讨论】:

      猜你喜欢
      • 2022-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多