6

我正在尝试将几个丰富器(现在是机器名称和线程 ID)与滚动文件接收器和 Loggly 接收器结合使用。虽然 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()

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

4

2 回答 2

15

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

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

于 2014-06-26T19:41:53.520 回答
0

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

.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

于 2019-02-13T08:13:58.310 回答