[英]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設置對象樹的下降距離
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.