Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 用serilog记录json_.net_Json_Seq_Serilog - Fatal编程技术网

.net 用serilog记录json

.net 用serilog记录json,.net,json,seq,serilog,.net,Json,Seq,Serilog,我想将任何json记录到serilog属性中。我已经阅读了很多关于serilog和json的内容,但是它是一个结构化的json日志,带有一个消息模板。因此,不要记录这个Log.Info(“{@text}”,text)我想这样做: var json="{ \"text\": \"hello\" }"; //a json string or a Json object Log.Info(json); 主要区别在于第一种方法有一个消息模板,并且始终有一个“text”属性。我希望json具有不同的结构

我想将任何json记录到serilog属性中。我已经阅读了很多关于serilog和json的内容,但是它是一个结构化的json日志,带有一个消息模板。因此,不要记录这个
Log.Info(“{@text}”,text)我想这样做:

var json="{ \"text\": \"hello\" }"; //a json string or a Json object
Log.Info(json);
主要区别在于第一种方法有一个消息模板,并且始终有一个“text”属性。我希望json具有不同的结构,例如:

var json="{ \"text\": \"hello\", \"text2\": \"hello2\" }"; //a json string or a Json object
Log.Info(json);

我希望获得2个属性,即每个json属性1个属性,而无需定义消息模板。这可能吗?我必须实现自己的JsonFormatter吗?

我使用了一个in
log4net
发送到
Seq
。因此,在发出消息时,我在
threadContext
中为Json中的每个
JProperty
添加了一个属性,仅在第一级。现在在Seq中,我可以通过任何json属性进行搜索。这是一个示例(在调用此方法之前,请注意消息变量应该是Json字符串)


您必须将记录器配置为使用Json.JsonFormatter并在记录信息时传递对象,Serilog将序列化该对象

配置

Log.Logger = new LoggerConfiguration()
            .WriteTo.RollingFile(new JsonFormatter(), Path.Combine(@"c:\log", "[filename]-{Date}.txt"))
            .CreateLogger()

应该注意的是,JSON by是一种基于字符串的交换格式。没有将JSON作为字符串与对象的概念……感谢您的回答。我有一个日志存储库,我想按属性进行搜索,所以有了消息模板,我可以提前定义我的所有属性。这就是我问这个问题的主要原因。您是否将JSON作为JSON.NET
JObject
?如果是这样的话,这应该是你想要的。
Log.Logger = new LoggerConfiguration()
            .WriteTo.RollingFile(new JsonFormatter(), Path.Combine(@"c:\log", "[filename]-{Date}.txt"))
            .CreateLogger()