0

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

任何人都可以看到我在哪里做错了吗?

4

1 回答 1

1

您正在使用自定义属性来获取布局中参数的值。只需使用%message.

<parameter>
    <parameterName value="@LogEntries" />
    <dbType value="String" />
    <size value="255" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message" />
    </layout>
</parameter>

现在可以正常使用mylogger.Info(...).

于 2013-08-13T13:29:48.210 回答