【问题标题】:Log4net Json custom properties not being read未读取 Log4net Json 自定义属性
【发布时间】:2015-04-18 22:05:50
【问题描述】:

我正在使用 log4net 在 sql 数据库中插入 JSON 格式的数据。一切都很好,除了没有保存的自定义属性。

这是我的配置:

<appender name="TGGADONetAppenderjson" type="log4net.Appender.ADONetAppender">
      <bufferSize value="1" />
      <connectionType value="System.Data.SqlClient.SqlConnection, System.Data,       Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
      <connectionString value="Data Source=LOANER-1122-HP\SQLEXPRESS;Initial Catalog=CAS-Dev;integrated security=false;persist security info=True;User Id=sa;Password=abinash12345;" />
      <commandText value="INSERT INTO Log ([Message],[AppName],[TransactionId]) VALUES
       (@message, @appName,@transactionId)" />

 <parameter>
        <parameterName value="@message" />
        <dbType value="String" />
        <size value="4000" />
        <layout type="log4net.Layout.SerializedLayout, log4net.Ext.Json"></layout>
      </parameter>
<parameter>
        <parameterName value="@appName" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.PatternLayout">
          <!--<conversionPattern value="%property{Environment}" />-->
          <conversionPattern value="APPNAME-LogTest" />
          <!--should be a fixed value-->
        </layout>
      </parameter>
      <parameter>
        <parameterName value="@transactionId" />
        <dbType value="String" />
        <size value="2000" />
        <layout type="log4net.Layout.PatternLayout" >
          <conversionPattern value="%property{TransactionId}" />
        </layout>
      </parameter>
    </appender>

    <root>
      <level value="ALL" />
      <appender-ref ref="TGGADONetAppenderjson" />
    </root>

当我调试时,我可以看到自定义属性“TransactionId”的值正在被放入线程中。但是插入不起作用。 TransactionId 没有记录在消息中,也没有插入到 TransactionId 列中。

我正在使用来自 NuGet 的 log4net json 版本 1.2.13.29

【问题讨论】:

  • 如果有帮助,这里是日志。 {"date":"2015-04-17T12:58:52.7092871-04:00","level":"INFO","appname":"LogginTest-Console.vshost.exe","logger":"METHODNAME - LogTest.Main","thread":"6","ndc":"(null)","message":"调用方法除以零.start"}
  • 它是否登录文本文件?无论答案是什么,您都可以尝试激活 log4net 程序集的内部调试:logging.apache.org/log4net/release/faq.html#internalDebug
  • 嗨,我能够找出导致 TransactionId 未出现在数据库中的代码问题。但是主要问题是 transactionId 不是 json 的一部分。它作为一个单独的领域出现。如何制作 json 的那一部分?

标签: json log4net log4net-configuration log4net-appender


【解决方案1】:

SerializedLayout 中还有一些配置。您需要明确命名该属性。尝试类似:

<layout type='log4net.Layout.SerializedLayout, log4net.Ext.Json'>
    <decorator type='log4net.Layout.Decorators.StandardTypesDecorator, log4net.Ext.Json' />
    <default /> <!-- explicit default members -->
    <member value='TransactionId' /> <!-- explicit property reference -->
</layout> 

查看Members test case 可能对您有帮助。

或者,通过添加 properties 成员来序列化所有属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 2023-04-01
    • 2020-12-28
    • 2015-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多