簡體   English   中英

NLog:記錄序列化為JSON的對象

[英]NLog: logging an object serialized to JSON

我有.Net項目與NLog配置,允許我生成JSON格式的日志文件。 它可以與簡單的文本消息一起使用。 現在,我需要記錄已經序列化為JSON的許多任意對象。 當我將這些JSON字符串記錄為日志消息時,NLog將文本放在引號中,然后轉義內部JSON語法。 這使得這樣的輸出無法使用。 到目前為止,我沒有找到NLog功能或布局設置,只是將我的JSON字符串轉儲為文字,沒有引號和轉義字符。 我錯過了什么嗎?

例。 目前我的日志條目如下:]

{ "dateTime": "2017-06-07 11:50:55.7324", "level": "DEBUG", "message": "\"description\": \"blah-blah\", \"Request\": { \"Request URL\":\/somepagepage\/}, \"Content\": { \"Form\": { ... } , \"Body\": \"Blah\" } ", "utcDateTime": "2017-06-05 06:10:34.1411" }

相反,我需要使它們看起來像:

{ "dateTime": "2017-06-07 11:50:55.7324", "level": "DEBUG", "message":
 { "description": "blah-blah", "Request": { "Request URL":/somepagepage/, "Content": { "Form": {...}, "Body": "Blah" }  }, "utcDateTime": "2017-06-05 06:10:34.1411" }

NLog.config的相關部分:

 <layout xsi:type="JsonLayout">
   <attribute name="dateTime" layout="${longdate}" />
   <attribute name="level" layout="${level:upperCase=true}"/>
   <attribute name="message" layout="${message}" /> 
   <attribute name="utcDateTime" layout="${longdate:universalTime=true}" />
 </layout>

最后,我希望看到一個日志條目,其中JSON嵌套在“message”中,而不是它的引用版本。

根據@Rolf Kristensen的評論。 實質上,參數encode =“false”允許記錄未加引號的JSON:

  <attribute name="message" layout="${message}" encode="false" /> 

純文本現在也沒有引用,但這可以通過自定義布局渲染器來處理,該渲染器可以從JSON告訴純文本。

將json添加到日志記錄的另一種方法是使用JsonLayout布局類型並將includeAllProperties設置為true。

您的記錄器布局配置應如下所示:

<layout xsi:type="JsonLayout" includeAllProperties="true" maxRecursionLimit="4">
</layout>

你的日志代碼是這樣的:

ILogger Logger = LogManager.GetCurrentClassLogger();
MyClass request = new MyClass(){ThisProp = "foo", ThatProp = "bar"};

LogEventInfo e = new LogEventInfo(LogLevel.Info, "EmptyResponseLogger", "");
e.Properties["Request"] = request;

Logger.Log(e);

你應該得到類似的東西:

{ "time": "2019-02-05 19:12:10.1643", "logger": "MyClassLogger", "level": "INFO", "Request": {"ThisProp":"foo", "ThatProp": "bar"} }

這樣做會在日志行的'Request'屬性上寫出一個JSON對象,並為您提供所需的響應。 maxRecursionLimit設置對象樹的下降距離

Json布局文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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