我正在使用带有C#的log4net AdoNetAppender将自定义XML消息记录到数据库中。我有一个存储过程,它将一个参数作为XML格式 这是我的配置文件的一部分:
<appender name="AdoNetAppender" type="log4net.Appender.ADONetAppender">
<bufferSize value="1" />
<threshold value="ALL" />
<reconnectOnError value="true" />
<param name="ConnectionType" value="System.Data.SqlClient.SqlConnection, System.Data, Version=1.0.3300.0, Culture=neutral, PublicKeyToken=xxxdfasdfas" />
<param name="ConnectionString" value="Data Source=myserver;integrated security=false;Initial Catalog=mydatabase; Persist Security Info=True;User ID=me;Password=me;" />
<param name="UseTransactions" value="False" />
<commandText value="dbo.InsertLog " />
<commandType value="StoredProcedure" />
<parameter>
<parameterName value="@LogEntries" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{LogEntries}" />
</layout>
</parameter>
</appender>
使用log4net,我应该可以做这样的事情,
mylogger.Info(FormatToXML(ID,Date,LogLevel,message)); //FormatToXML takes these arguments, and create XMLElement
但是,上面的行不会向数据库插入任何内容。我打开了log4net调试器,但是我没有看到任何错误/异常。
但是,这很有效,
log4net.GlobalContext.Properties["LogEntries"] = FormatToXML(ID,Date,LogLevel,message);
mylogger.Info("");
我确信我做错了,我应该只能拨打mylogger.Info(...)
。
有人能看到我做错了吗?
答案 0 :(得分:1)
您正在使用自定义属性来获取布局中参数的值。只需使用%message
即可更改布局模式。
<parameter>
<parameterName value="@LogEntries" />
<dbType value="String" />
<size value="255" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%message" />
</layout>
</parameter>
现在可以使用mylogger.Info(...)
正常工作。