簡體   English   中英

Serilog機器名稱用於滾動文件接收器

[英]Serilog machine name enricher for rolling file sink

我正在嘗試使用一些富集程序(現在的機器名和線程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()

有沒有人設法做到這一點? 這種行為是設計還是滾動文件接收器不支持這些豐富?

machinename和threadid作為屬性添加到所有日志事件中。 它們不在messageformat中,因此serilog不會將它們轉換為文本表示。 然而,他們將被送到水槽。 Loggly接收器將選擇所有屬性(包括線程ID等)並將其轉換為Loggly理解的東西(因為它可以接受任何類型的數據)。

如果您希望RollingFile接收器也輸出機器名等,則需要調整te輸出模板。 所以將它設置為例如:

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

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

由於滾動文件接收器無法輸出所有屬性,因此您只能獲取默認情況下不包含這些屬性的呈現消息。

如果您沒有看到像這樣的富集添加的屬性

.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。 現在我的所有richfin都在沒有任何outputTemplate的情況下工作。

有關詳細信息,請參閱以下頁面。 https://github.com/serilog/serilog/wiki/Formatting-Output

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM