Serilog 格式化程序
编辑Serilog 格式化程序编辑
此 ITextFormatter
实现将 Serilog 事件格式化为符合 Elastic Common Schema 规范的 JSON 表示形式。
安装编辑
添加对 Elastic.CommonSchema.Serilog 包的引用
<PackageReference Include="Elastic.CommonSchema.Serilog" Version="8.6.0" />
用法编辑
var logger = new LoggerConfiguration() .WriteTo.Console(new EcsTextFormatter()) .CreateLogger();
在上面的代码段中,new EcsTextFormatter()
启用文本格式化程序并指示 Serilog 将事件格式化为 JSON。上面的示例使用控制台接收器,但您可以随意使用任何您选择的接收器,也许可以考虑使用文件系统接收器和 Elastic Filebeat 来实现持久且可靠的摄取。
在 ASP.NET(核心)应用程序中
.UseSerilog((ctx, config) => { // Ensure HttpContextAccessor is accessible var httpAccessor = ctx.Configuration.Get<HttpContextAccessor>(); config .ReadFrom.Configuration(ctx.Configuration) .Enrich.WithEcsHttpContext(httpAccessor) .WriteTo.Async(a => a.Console(new EcsTextFormatter())); })
WithEcsHttpContext
确保日志将通过 HttpContext
数据进行丰富。
下面给出了输出示例
{ "@timestamp": "2019-11-22T14:59:02.5903135+11:00", "log.level": "Information", "message": "Log message", "ecs": { "version": "1.4.0" }, "event": { "severity": 0, "timezone": "AUS Eastern Standard Time", "created": "2019-11-22T14:59:02.5903135+11:00" }, "log": { "logger": "Elastic.CommonSchema.Serilog" }, "process": { "thread": { "id": 1 }, "executable": "System.Threading.ExecutionContext" } }
配置编辑
选项 | 描述 |
---|---|
|
|
|
|
|
一个 |
|
一个 Func,允许您在完全转换之前修改 EcsDocument。 |
ECS 敏感消息模板编辑
此格式化程序还允许您使用符合 https://messagetemplates.org/ 格式的属性从消息模板中直接设置 ECS 字段。
可用的 ECS 消息模板属性列在 LogTemplateProperties.*
下,例如 LogTemplateProperties.TraceId
Log.Information("The time is {TraceId}", "my-trace-id");
将覆盖生成的 ECS json 文档上的 trace.id
。