将自定义xml消息写入数据库

时间:2013-08-13 13:08:58

标签: log4net

我正在使用带有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(...)

有人能看到我做错了吗?

1 个答案:

答案 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(...)正常工作。