[英]Removing Default Properties in Serilog Output
在Serilog output 文件中,我看到默認是
{
"Timestamp": "2016-05-28T21:21:59.0932348+08:00",
"Level": "Information",
"MessageTemplate": "Processed {@Number} records in {@Time} ms",
"Properties": {
"Number": 500,
"Time": 120
}
}
有沒有辦法刪除時間戳、級別、消息模板和屬性,這樣我就只剩下這個了
{
"Number": 500,
"Time": 120
}
Log.Logger 是這樣分配的
Log.Logger = new LoggerConfiguration()
.WriteTo.Sink(new FileSink(ConfigurationManager.AppSettings["serilogPath"], new JsonFormatter(), null))
.CreateLogger();
謝謝
這個問題很老,但現在有一些簡單的解決方案,所以我想分享一下。
確保你有這個Serilog.Expressions Nuget Package (至少版本 3.3)
您現在可以在代碼中配置ExpressionTemplate
,這是一個示例:
Log.Logger = new LoggerConfiguration().WriteTo.Console(formatter: new ExpressionTemplate("{ {@t, @mt, @r, @l: if @l = 'Information' then undefined() else @l, @x, ..@p} }\n")).CreateLogger();
或者你可以在appSettings.json
中配置ExpressionTemplate
,像這樣
{ "Name": "Console", "Args": { "formatter": { "type": "Serilog.Templates.ExpressionTemplate, Serilog.Expressions", "template": "[{@t:HH:mm:ss} {@l:u3} {Coalesce(SourceContext, '<none>')}] {@m}\n{@x}" } } }
筆記
appSettings
中的formatter
詞是方法參數的名稱,因此它可能會有所不同,具體取決於您使用的接收器。
例如,我使用Mongodb Sink ,所以參數的名稱對我來說是mongoDBJsonFormatter
我在這里不解釋ExpressionTemplate
的語法,您可以參考以下鏈接了解更多信息。
這是一篇很好的文章,更詳細地解釋了這一點
這是一些文檔
從查看源代碼看 ,它看起來不像JsonFormatter支持跳過這些默認屬性。 您可以創建自己的ITextFormatter來完成您正在尋找的任務。 這是一個快速示例(不應該在生產中使用,因為它不會進行任何轉義 - 它僅用於演示目的):
public class SOFormatter : ITextFormatter
{
public void Format(LogEvent logEvent, TextWriter output)
{
output.Write("{");
foreach (var p in logEvent.Properties)
{
output.Write("\"{0}\" : {1}, ", p.Key, p.Value);
}
output.Write("}");
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.