使用 serilog 记录 json
log json with serilog
我想将任何 json 记录到 serilog 属性中。我已经阅读了很多关于 serilog 和 json 的内容,但它是一个结构化的 json 日志记录,带有一个消息模板。所以我不想记录这个 Log.Info("{@text}",text);
我想这样做:
var json = "{ \"text\": \"hello\" }"; //a json string or a Json object
Log.Info(json);
主要区别在于,对于第一种方法,您有一个消息模板,并且始终有一个“文本”属性。我想要 json 具有不同的结构,例如如果我有:
var json = "{ \"text\": \"hello\", \"text2\": \"hello2\" }"; //a json string or a Json object
Log.Info(json);
我想获得 2 个属性,即每个 json 属性 有 1 个 属性,而无需定义消息模板。这可能吗?我必须实现自己的 JsonFormatter 吗?
我在 log4net
中使用了一个发送到 Seq
。因此,在发出消息时,我仅在第一级为 Json 中的每个 JProperty
添加了 threadContext
一个 属性。现在在 Seq 中,我可以通过 json 属性 中的任何一个进行搜索。这是一个示例(注意消息变量在调用此方法之前应该是 Json 字符串)。
private void AddProperties(string message)
{
var parsedObject = JObject.Parse(message);
foreach (JProperty prop in parsedObject.Properties())
{
AddProperty(prop);
}
}
private void AddProperty(JProperty message)
{
log4net.ThreadContext.Properties[message.Name] = message.Value.ToString();
}
您必须将记录器配置为使用 Json.JsonFormatter 并在记录信息时仅传递对象,Serilog 将序列化该对象。
配置
Log.Logger = new LoggerConfiguration()
.WriteTo.RollingFile(new JsonFormatter(), Path.Combine(@"c:\log", "[filename]-{Date}.txt"))
.CreateLogger()
我想将任何 json 记录到 serilog 属性中。我已经阅读了很多关于 serilog 和 json 的内容,但它是一个结构化的 json 日志记录,带有一个消息模板。所以我不想记录这个 Log.Info("{@text}",text);
我想这样做:
var json = "{ \"text\": \"hello\" }"; //a json string or a Json object
Log.Info(json);
主要区别在于,对于第一种方法,您有一个消息模板,并且始终有一个“文本”属性。我想要 json 具有不同的结构,例如如果我有:
var json = "{ \"text\": \"hello\", \"text2\": \"hello2\" }"; //a json string or a Json object
Log.Info(json);
我想获得 2 个属性,即每个 json 属性 有 1 个 属性,而无需定义消息模板。这可能吗?我必须实现自己的 JsonFormatter 吗?
我在 log4net
中使用了一个发送到 Seq
。因此,在发出消息时,我仅在第一级为 Json 中的每个 JProperty
添加了 threadContext
一个 属性。现在在 Seq 中,我可以通过 json 属性 中的任何一个进行搜索。这是一个示例(注意消息变量在调用此方法之前应该是 Json 字符串)。
private void AddProperties(string message)
{
var parsedObject = JObject.Parse(message);
foreach (JProperty prop in parsedObject.Properties())
{
AddProperty(prop);
}
}
private void AddProperty(JProperty message)
{
log4net.ThreadContext.Properties[message.Name] = message.Value.ToString();
}
您必须将记录器配置为使用 Json.JsonFormatter 并在记录信息时仅传递对象,Serilog 将序列化该对象。
配置
Log.Logger = new LoggerConfiguration()
.WriteTo.RollingFile(new JsonFormatter(), Path.Combine(@"c:\log", "[filename]-{Date}.txt"))
.CreateLogger()