簡體   English   中英

如何在 Serilog 輸出模板中創建可選屬性?

[英]How can I create an optional property in a Serilog output template?

我正在嘗試為遵循以下格式的 serilog 消息創建全局輸出模板:

{Timestamp:yyyy-MM-dd HH:mm:ss,fff} [{ComponentName}, {ApplicationName}, {ThreadId}] {Level} ({ErrorId}): {Message} {Exception}

我遇到的問題是,有些消息不包含錯誤 ID、異常或 ThreadId。 因此,當這種情況發生時,我收到一條消息,其中包含一堆字符,這些字符會給日志消息添加噪音,例如,

2015-06-24 15:11:03,234 [Component, MyApp, ] Info (): This is a message that I'm writing

是否可以讓 Serilog 支持消息模板中的可選參數?

我在我的應用程序中使用Serilog,並且你注意到“缺失”字段會在你觀察時“消失”,但這些占位符周圍的字符格式不會。

我建議更改消息模板的格式,以便可選的字段顯示在后續行(可以忽略)或格式化,以便您不會注意到它們的缺席。

您還可以編寫一個包含您的應用程序調用的Serilog日志記錄方法(logger.Debug,logger.Warning,logger.Information等)的包裝器,它包含邏輯(或重載方法)以了解哪些值存在以及哪些值存在沒有。 包裝器代碼將提供具有正確組合的適當消息模板,以避免消息中的額外字符。

您可以使用Serilog.Expressions使用帶有條件塊ExpressionTemplate來控制輸出,以便僅將存在的屬性寫入輸出,包括空格和分隔符。 例如

// using Serilog.Templates;

Log.Logger = new LoggerConfiguration()
    .WriteTo.Console(new ExpressionTemplate(
        "[{@t:HH:mm:ss}{#if ErrorId is not null} ({ErrorId}){#end}"))
    .CreateLogger();

暫無
暫無

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

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