![](/img/trans.png)
[英]How can I include both “Message” and “MessageTemplate” in the Serilog JsonFormatter output?
[英]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.