C# Serilog Network.Sink json输出格式
我一直在使用Serilog登录到本地文件,它具有很好的特性,可以轻松地选择输出模板 像这样:C# Serilog Network.Sink json输出格式,c#,.net-core,serilog,C#,.net Core,Serilog,我一直在使用Serilog登录到本地文件,它具有很好的特性,可以轻松地选择输出模板 像这样: _logger = new LoggerConfiguration() .WriteTo.File( Path.Combine(config.Value.FilePath, config.Value.FileName), outputTemplate: "[{Timestamp
_logger = new LoggerConfiguration()
.WriteTo.File(
Path.Combine(config.Value.FilePath, config.Value.FileName),
outputTemplate: "[{Timestamp:yyyy-MM-dd HH:mm:ss}] {Message:lj}{NewLine}",
rollingInterval: RollingInterval.Day
).CreateLogger();
现在我正在尝试使用Serilog进行网络日志记录,如下所示:
var ip = IPAddress.Parse(config.Value.ServerIp);
_logger = new LoggerConfiguration()
.WriteTo.TCPSink(ip, config.Value.Port)
.CreateLogger();
var message = new { to_index = "test-index", message = "test-message" };
var json = JsonConvert.SerializeObject(message, Formatting.Indented);
log.Information(json);
如果我是这样记录的:
var ip = IPAddress.Parse(config.Value.ServerIp);
_logger = new LoggerConfiguration()
.WriteTo.TCPSink(ip, config.Value.Port)
.CreateLogger();
var message = new { to_index = "test-index", message = "test-message" };
var json = JsonConvert.SerializeObject(message, Formatting.Indented);
log.Information(json);
kibana板上的输出如下所示:
{"timestamp":"2020-04-11T10:10:58.1110467+02:00","level":"Information","message":"{\r\n \"to_index\": \"test-index\",\r\n \"message\": \"test-message\"\r\n}"}
虽然我希望它是我提交的唯一对象:
{\"to_index\": \"test-index\",\"message\": \"test-message\"}
数据发送(或呈现)方式的定制取决于您使用的接收器,因为接收器为您提供了一种方法 例如,某些接收器允许您提供一个
outputTemplate
字符串来定义属性,其他接收器允许您提供一个实现ITextFormatter
的类,该类负责格式化消息
您似乎正在使用它,它确实允许您提供一个自定义的
ITextFormatter
,因此您可以基于其中一个默认的格式化程序(和)实现自己的格式化程序,并决定消息应该如何发送。数据发送(或呈现)方式的自定义取决于你使用的水槽,因为水槽可以为你提供一种方法
例如,某些接收器允许您提供一个outputTemplate
字符串来定义属性,其他接收器允许您提供一个实现ITextFormatter
的类,该类负责格式化消息
您似乎正在使用它,它确实允许您提供一个自定义的ITextFormatter
,因此您可以基于其中一个默认的格式化程序(和)实现自己的格式化程序,并决定如何发送消息