2014-11-11 23 views
5

Myślę, że brakuje mi czegoś, ponieważ nie mogę wymyślić, jak to zapisać w pliku dziennika w formacie json przy użyciu konfiguracji NLog w pliku konfiguracyjnym. Prosty plik działa dobrze, ale nie json. Cel json wysyła tylko komunikat (nie json).przy użyciu Nlog i zapisywanie do pliku jako json

<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">   
    <targets async="true"> 
     <target xsi:type="File" name="rollingFile" fileName="${basedir}/logs/${shortdate}.log" archiveFileName="${basedir}/logs/{shortdate}_Archive{###}.log" archiveAboveSize="1000000" archiveNumbering="Sequence" layout="${longdate} ${uppercase:${level}} ${callsite} ${message}" /> 
     <target xsi:type="File" 
       name="rollingFileJson" 
       fileName="${basedir}/logs/${shortdate}.json" 
       archiveFileName="${basedir}/logs/{shortdate}_Archive{###}.json" 
       archiveAboveSize="1000000" 
       archiveNumbering="Sequence" 
       layout="${json-encode} ${message}"> 
     </target> 

    </targets> 
    <rules> 
     <logger name="*" minlevel="Trace" writeTo="rollingFile" /> 
     <logger name="*" minlevel="Trace" writeTo="rollingFileJson" /> 
    </rules> 
    </nlog> 

Odpowiedz

2

Zgodnie NLog documentation: json zakodować będzie tylko wyjście ucieczki innego układu z zastosowaniem zasad JSON. Nie "konwertuje" wyjścia do JSON. Musisz to zrobić sam.

'{ "date":"${longdate}","level":"${level}","message":${message}}' 

Aby uzyskać więcej informacji, zobacz this question.

7

Od wydania wersji NLog 4.0.0 możliwe jest użycie układu, który renderuje zdarzenia jako uporządkowane dokumenty JSON.

Przykład wzięty z NLog project site:

<target name="jsonFile" xsi:type="File" fileName="${logFileNamePrefix}.json"> 
    <layout xsi:type="JsonLayout"> 
     <attribute name="time" layout="${longdate}" /> 
     <attribute name="level" layout="${level:upperCase=true}"/> 
     <attribute name="message" layout="${message}" /> 
    </layout> 
</target> 

Edit: Można również utworzyć je w kodzie.

Here to łącze do określonej części dokumentacji.

I tu skopiowanym przykład:

var jsonLayout = new JsonLayout 
{ 
    Attributes = 
    { 
     new JsonAttribute("type", "${exception:format=Type}"), 
     new JsonAttribute("message", "${exception:format=Message}"), 
     new JsonAttribute("innerException", new JsonLayout 
     { 

      Attributes = 
      { 
       new JsonAttribute("type", "${exception:format=:innerFormat=Type:MaxInnerExceptionLevel=1:InnerExceptionSeparator=}"), 
       new JsonAttribute("message", "${exception:format=:innerFormat=Message:MaxInnerExceptionLevel=1:InnerExceptionSeparator=}"), 
      } 
     }, 
     //don't escape layout 
     false) 
    } 
}; 

Więcej informacji przeczytać docs.

+0

Jakikolwiek sposób to zrobić w sposób programowy? – user3841581

+0

@ user3841581 Dodano przykład zaczerpnięty z dokumentacji, aby zrobić to w kodzie. – Chrono