簡體   English   中英

使用屬性豐富 Seq 日志語句,而不將它們包含在消息行中(使用 Serilog)

[英]Enrich Seq log statements with properties without also including them in the message line (using Serilog)

我正在將 Serilog 與 Seq 一起使用,並希望使用我自己的屬性來豐富 Seq 中出現的日志記錄。

如果我輸入一個日志語句,如...

Log.Information("ProcessCycle {Site} {Activity}", SiteName, ActivityName);

在 Seq 我得到...

在此處輸入圖片說明

請注意,站點和活動值在 Seq 中顯示為豐富的屬性,但它們也顯示在整體消息中。

如何記錄獲取豐富屬性的位置,但文本消息行中沒有顯示值? 請注意,我有 NuGet 包,它為每個調用添加了一個 ThreadId。 我希望 Site 和 Activity 屬性位於豐富的道具列表中,但不一定打印在消息行中。

對此的答案可能還需要了解我們的應用程序。

該應用程序是一個 Windows 服務,它產生多個做不同事情的活動。 因此,Windows 服務編排了其中包含的各種活動。 按照計划,它只是在每個活動上調用“流程”來完成一些工作。 每次流程被編排器調用時,我都需要該 Activity 的所有日志記錄以自動包含如上所示的 Site 和 Activity 值(以及更多屬性值,但我不希望它們全部打印在消息行中)。

因此,我們將看到的不是上面的條目,而是... 注意消息現在只顯示為“ProcessCycle”。

在此處輸入圖片說明

Log.Information("ProcessCycle {Site} {Activity}", SiteName, ActivityName);

需要改為:

Log.ForContext("Site",SiteName)
    .ForContext("Activity",ActivityName)
    .Information("ProcessCycle")

隨心所欲地呈現。

您還可以執行Enrich.FromLogContext和執行LogContext.PushProperty以在全局范圍內執行此操作(搜索這兩個字符串以查找示例)。

由約翰利弗莫爾添加

有關 FromLogContext 和其他方法的更多信息,請訪問... https://nblumhardt.com/2016/08/context-and-correlation-structured-logging-concepts-in-net-5/

FromLogContext 創建一個 ILogger,可在范圍內用於后續日志記錄調用。

暫無
暫無

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

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