use*_*538 9 c# json structured-data serilog
我有这个结构:
public class LogRequestParameters
{
public string RequestID { get; set; }
public string Type { get; set; }
public string Level { get; set; }
public string DateTime { get; set; }
public string MachineName { get; set; }
public Request Request { get; set; }
}
public class Request
{
public string URLVerb { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在编写以下日志记录:
Serilog.Log.Information("{@LogRequestParameters}", logRequestParameters);
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
LogRequestParameters { RequestID: "bf14ff78-d553-4749-b2ac-0e5c333e4fce", Type: "Request", Level: "Debug", DateTime: "9/28/2016 3:12:27 PM", MachineName: "DXBKUSHAL", Request: Request { URLVerb: "GET /Violation/UnpaidViolationsSummary" } }
Run Code Online (Sandbox Code Playgroud)
这不是一个有效的json."LogRequestParameters"(类的名称)即将开始."请求"(财产的名称)将要两次.如何记录有效的json?
假设您正在使用文件,滚动文件或控制台接收器,则需要指定JsonFormatter:
Log.Logger = new LoggerConfiguration()
.WriteTo.RollingFile(new JsonFormatter(), "myapp-{Date}.json")
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
Serilog支持一些不同的JSON格式; 有关替代方案的讨论,请参阅此帖
确保您的消息模板在末尾包含:lj格式说明符:
Log.Logger = new LoggerConfiguration()
.WriteTo.Console(outputTemplate:
"[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}")
.CreateLogger();
Run Code Online (Sandbox Code Playgroud)
从文档:
消息 - 日志事件的消息,呈现为纯文本。:l 格式说明符切换字符串的引用,而 :j 对任何嵌入的结构化数据使用 JSON 样式呈现。
在带有 JSON 示例的前端文档页面上没有提及它,我也花了很多时间来解决这个问题。
| 归档时间: |
|
| 查看次数: |
7703 次 |
| 最近记录: |