簡體   English   中英

如何以有效的 json 格式使用 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM