![](/img/trans.png)
[英]How to format file log output with asp.net core and Serilog
[英]How to log complex object using Serilog in valid json format?
我有這個結構:
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; }
}
我正在寫以下行進行日志記錄:
Serilog.Log.Information("{@LogRequestParameters}", logRequestParameters);
我得到以下輸出:
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" } }
這不是有效的 json。 “LogRequestParameters”(類名)即將開始。 “請求”(財產名稱)來了兩次。 如何記錄有效的 json?
假設您正在使用文件、滾動文件或控制台接收器,您需要指定一個JsonFormatter
:
Log.Logger = new LoggerConfiguration()
.WriteTo.RollingFile(new JsonFormatter(), "myapp-{Date}.json")
.CreateLogger();
Serilog 支持幾種不同的 JSON 格式; 請參閱 此帖子以討論一些替代方案。
確保您的消息模板在末尾包含:lj格式說明符:
Log.Logger = new LoggerConfiguration()
.WriteTo.Console(outputTemplate:
"[{Timestamp:HH:mm:ss} {Level:u3}] {Message:lj}{NewLine}{Exception}")
.CreateLogger();
從文檔:
消息 - 日志事件的消息,呈現為純文本。 :l 格式說明符切換字符串的引用,而 :j 對任何嵌入的結構化數據使用 JSON 樣式呈現。
在帶有 JSON 示例的前端文檔頁面上沒有提及它,我也花了很多時間來解決這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.