私はこの構造を持っています:
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をログに記録するにはどうすればよいですか?
ファイル、ローリングファイル、またはコンソールシンクを使用していると仮定すると、JsonFormatter
を指定する必要があります。
Log.Logger = new LoggerConfiguration()
.WriteTo.RollingFile(new JsonFormatter(), "myapp-{Date}.json")
.CreateLogger();
Serilogではいくつかの異なるJSON形式がサポートされています。いくつかの代替案については、 この投稿 を参照してください。