log4net.ext.json:仅记录消息属性

时间:2016-05-19 23:19:20

标签: json log4net

我正在使用log4net.ext.json将'message'属性序列化到我的日志中。但是,当我使用标准配置时,'message'对象作为属性包含在另一个对象中。

这是我的配置

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

然而,正在记录的数据不仅记录消息对象,还包括其他上下文信息,例如appname,level和exception。

记录异常时会出现此问题,因为添加的堆栈跟踪文本有时会超出数据库中的最大字段大小。

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",
}

我想要做的就是在此特定参数中记录只是日志记录事件对象的'message'属性。

基本上,它应该在日志中显示如下:

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

任何想法如何做到这一点?

1 个答案:

答案 0 :(得分:1)

删除<default/>元素。它告诉布局包含事件中的所有默认属性。

请注意,属性名称(&#34; message&#34;)将保留,但是:

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