web-dev-qa-db-ja.com

有効なjson形式で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; }
}

私はロギングのために次の行を書いています:

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」(クラスの名前)が最初に来ています。 「リクエスト」(物件名)が2回来ています。有効なjsonをログに記録するにはどうすればよいですか?

10
user1780538

ファイル、ローリングファイル、またはコンソールシンクを使用していると仮定すると、JsonFormatterを指定する必要があります。

Log.Logger = new LoggerConfiguration()
    .WriteTo.RollingFile(new JsonFormatter(), "myapp-{Date}.json")
    .CreateLogger();

Serilogではいくつかの異なるJSON形式がサポートされています。いくつかの代替案については、 この投稿 を参照してください。

5