[英]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.