2017-06-07 21 views
1

私はJSON形式のログファイルを作成するためのNLog設定の.Netプロジェクトを持っています。シンプルなテキストメッセージでうまく動作します。今、JSONにすでにシリアライズされた任意のオブジェクトをいくつかログに記録する必要があります。これらのJSON文字列をログメッセージとしてログに記録すると、NLogはテキストを引用符で囲み、その後内部JSON構文をエスケープします。このような出力は使用不可能になります。これまでのところ、NLogの機能やレイアウトの設定で、JSON文字列を引用符とエスケープ文字を使用せずにリテラルとしてダンプすることはできませんでした。何か不足していますか?NLog:JSONにシリアル化されたオブジェクトのログ

例。最終的に

<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> 

:代わりに、私は彼らが見えるように作る必要がある]

{ "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から関連するセクションを、現在の私のログエントリは次のようになりJSONを「メッセージ」内にネストし、引用符で囲んだものではないログエントリを見たいと思います。

+0

あなたの設定は何ですか? – Julian

+0

メッセージ要素にパラメータencode = "false"を追加するとどうなりますか? (属性名= "mesage" encode = "false" ...) –

+0

まさに私が探していたものです。ありがとう@RolfKristensen - これはトリックでした!プレーンテキストメッセージは引用符なしで出てきますが、これを処理するためにレンダリングされたカスタムレイアウトを書くことができます。あなたは緑のダニに値する。 – Puzzled

答えて

1

@Rolf Kristensenの解説は上記のとおりです。基本的に、パラメータのエンコードは=「false」を引用符で囲まれていないJSONをログに記録することができます:

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

プレーンテキストでも引用符で囲まれていない今出てきますが、これはJSONからプレーンテキストを伝えることができるカスタムレイアウトレンダラによって対処することができます。

関連する問題