2015-04-18 13 views
2

Я вставляю данные формата JSON в базу данных sql, используя log4net. Все в порядке, кроме настраиваемых свойств, которые не сохраняются.Пользовательские свойства Log4net 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.

Я использую log4net JSon версия 1.2.13.29 от NuGet

+0

Вот журнал, если это помогает. {"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 "} –

+1

Записывает ли он текстовый файл? Каким бы ни был ответ, вы можете попробовать активировать внутреннюю отладку для сборки log4net: https://logging.apache.org/log4net/release/faq.html#internalDebug – samy

+0

Привет, я смог понять проблему с моим кодом, который вызывал TransactionId не отображается в базе данных. Однако основная проблема заключается в том, что транзакция не является парой json. Его появление как отдельное поле. Как я могу сделать эту часть json? –

ответ

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> 

Вот тест, который может помочь вам: https://sourceforge.net/p/log4net-json/code/HEAD/tree/trunk/log4net.Ext.Json.Tests/Layout/Arrangements/Members.cs