2016-05-19 8 views
1

Ich verwende log4net.ext.json, um die Eigenschaft 'message' für meine Protokolle zu serialisieren. Wenn ich jedoch die Standardkonfiguration verwende, wird das Objekt 'Nachricht' als Eigenschaft für ein anderes Objekt eingefügt.log4net.ext.json: Nur die Nachrichteneigenschaft protokollieren

Hier meine Konfiguration

<parameter> 
    <parameterName value="@message" /> 
    <dbType value="String" /> 
    <size value="4000" /> 
    <layout type="log4net.Layout.SerializedLayout, log4net.Ext.Json"> 
     <decorator type='log4net.Layout.Decorators.StandardTypesDecorator, log4net.Ext.Json' /> 
     <default /><!--explicit default members--> 
     <remove value='message' /><!--remove the default preformatted message member--> 
     <member value='message:messageobject' /><!--add raw message--> 
    </layout> 
    </parameter> 

Die Daten, die protokolliert wird, ist jedoch nicht nur das Nachrichtenobjekt einzuloggen, enthält es andere Kontextinformationen wie appname, Füllstands- und Ausnahme.

Dies ist ein Problem, wenn eine Ausnahme protokolliert wird, da der hinzugefügte Stack-Trace-Text manchmal die maximale Feldgröße in der Datenbank überschreitet.

date": "2016-05-20T09:06:18.6288814+10:00", 
"level": "WARN", 
"appname": "/LM/W3SVC/3/ROOT-1-131081726390968061", 
"logger": "DefaultLogger", 
"thread": "10", 
"ndc": "(null)", 
-"message": { 
    "Message": "Model validation errors", 
    "Method": "LogValidationErrorsAttribute.OnActionExecuting", 
    "IsLocal": true, 
    "IsAuthenticated": false, 
    "IsSecureConnection": false, 
    "HttpMethod": "POST",   
    "CurrentUICulture": "en", 
    "CurrentCulture": "en", 
} 

Alles, was ich tun möchte, ist nur die ‚Nachricht‘ Eigenschaft des Protokollierungsereignisobjekts in diesem Parameter zu protokollieren.

Grundsätzlich sollte es so im Protokoll aussehen:

{ 
    "Message": "Model validation errors", 
    "Method": "LogValidationErrorsAttribute.OnActionExecuting", 
    "IsLocal": true, 
    "IsAuthenticated": false, 
    "IsSecureConnection": false, 
    "HttpMethod": "POST",   
    "CurrentUICulture": "en", 
    "CurrentCulture": "en", 
} 

Irgendwelche Ideen, wie dies zu tun?

Antwort

1

Das <default/> Element entfernen. Es teilt dem Layout mit, dass alle Standardeigenschaften im Ereignis enthalten sind.

Beachten Sie, dass der Name der Eigenschaft ("message") bleibt jedoch:

{ 
    "message": { 
    "Message": "Model validation errors", 
    "Method": "LogValidationErrorsAttribute.OnActionExecuting", 
    ... 
    } 
} 
Verwandte Themen