log4net ADO存储过程

时间:2011-03-14 14:17:57

标签: log4net

我正在尝试调用现有的存储过程但无法将其记录下来。似乎是参数类型转换问题,但我无法弄明白。

构建错误是:

  

log4net:错误XmlHierarchyConfigurator:找不到属性   [conversionPattern]设置对象   [log4net.Layout.RawPropertyLayout]

web.config是:

<appender name="ADONetAppender" type="log4net.Appender.ADONetAppender">
  <bufferSize value="1" />
  <threshold value="ALL"/>
  <param name="ConnectionType" value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
  <param name="ConnectionString" value="Data Source=central-db.canterbury.ac.uk\devel;Initial Catalog=SourceDB;Persist Security Info=True;/>
  <param name="UseTransactions" value="False" />
  <commandText value="dbo.usperrLogError" />
  <commandType value="StoredProcedure" />

  <parameter>
    <parameterName value="@ApplicationId"/>
    <dbType value="String"/>
    <size value="2" />
    <layout type="log4net.Layout.RawPropertyLayout">
      <key value="EventGuid" />
      <conversionPattern value="%property{APP-ID}"/>
      </layout>
  </parameter>
  //
  <parameter>
    <parameterName value="@EventGuid"/>
    <dbType value="String"/>
    <size value="50" />
    <layout type="log4net.Layout.RawPropertyLayout">
      <key value="EventGuid" />
      <conversionPattern value="%property{GUID}"/>
    </layout>
  </parameter>

设置这样的属性:

log4net.ThreadContext.Properties["GUID"] = eventGuid.ToString();

在log4net调试错误之后,此处还有一个错误:

A first chance exception of type 'System.ArgumentNullException' occurred in mscorlib.dll
log4net:ERROR [AdoNetAppender] Failed in DoAppend
System.ArgumentNullException: Key cannot be null.
Parameter name: key
   at System.Collections.Hashtable.get_Item(Object key)
   at log4net.Util.PropertiesDictionary.get_Item(String key) in c:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\src\Util\PropertiesDictionary.cs:line 114
   at log4net.Core.LoggingEvent.LookupProperty(String key) in c:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\src\Core\LoggingEvent.cs:line 1404
   at log4net.Layout.RawPropertyLayout.Format(LoggingEvent loggingEvent) in c:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\src\Layout\RawPropertyLayout.cs:line 84
   at log4net.Appender.AdoNetAppenderParameter.FormatValue(IDbCommand command, LoggingEvent loggingEvent) in c:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\src\Appender\AdoNetAppender.cs:line 1117
   at log4net.Appender.AdoNetAppender.SendBuffer(IDbTransaction dbTran, LoggingEvent[] events) in c:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\src\Appender\AdoNetAppender.cs:line 560
   at log4net.Appender.AdoNetAppender.SendBuffer(LoggingEvent[] events) in c:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\src\Appender\AdoNetAppender.cs:line 501
   at log4net.Appender.BufferingAppenderSkeleton.Append(LoggingEvent loggingEvent) in c:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\src\Appender\BufferingAppenderSkeleton.cs:line 463
   at log4net.Appender.AppenderSkeleton.DoAppend(LoggingEvent loggingEvent) in c:\work\svn_root\apache\log4net\tags\log4net-1.2.10-rc2\build\package\log4net-1.2.10\src\Appender\AppenderSkeleton.cs:line 316
A first chance exception of type 'System.ArgumentNullException' occurred in mscorlib.dll
log4net:ERROR [AdoNetAppender] Failed in DoAppend
System.ArgumentNullException: Key cannot be null.

显然我没有正确使用RawPropertyLayout,但找不到好的例子!

1 个答案:

答案 0 :(得分:3)

我做了类似你的事情,但我使用log4net.Layout.PatternLayout这样:

<parameter>
  <parameterName value="@ProjectParam1"/>
  <dbType value="String"/>
  <size value="254" />
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%property{OrderNumber}" />
  </layout>
</parameter>

如果我正确理解log4net.Layout.RawPropertyLayout,您必须按如下方式使用它:

<parameterName value="@EventGuid"/>
   <dbType value="String"/>
   <size value="50" />
   <layout type="log4net.Layout.RawPropertyLayout">
      <param name="Key" value="GUID" />
   </layout>
</parameter>
相关问题