Log4Net c# AdoNetAdapter 附加字段

Log4Net c# AdoNetAdapter Additional Fields

我看到了多个关于如何执行此操作的链接,我的版本在技术上是可行的。

示例:Example

所以,我在我的代码中添加了一个新的 属性、Unit_Name。

for (int i = 0; i < 5; i++)
{
    log4net.GlobalContext.Properties["Unit_Name"] = "Bob " + i.ToString();
    log.Fatal("This is fatal");
}

并且在 Console Appender 的配置文件中

 <appender name="console" type="log4net.Appender.ConsoleAppender">
  <layout type="log4net.Layout.PatternLayout">
    <conversionPattern value="%date %level %logger  %property{unit_name} - %message %newline" />
  </layout>
 </appender>

这行得通,所以我将其添加到我的 AdoNetAdapter 部分。

      <commandText value="INSERT INTO Log ([Date],[Thread],[Level],[Logger],[UnitName],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger,@unit_name, @message, @exception)" />

和一个参数部分

  <parameter>
    <parameterName value="@unit_name" />
    <dbType value="String" />
    <size value="200" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property(Unit_Name)" />
    </layout>
  </parameter>

现在测试一切正常,但上面的参数应该显示字符串 Bob 1、Bob 2 等。但是在查看数据库 table 时,我得到以下信息:

{log4net:HostName=GBRCL33199, log4net:Identity=, log4net:UserName=userName, Unit_Name=Bob 0}(Unit_Name)

这一定是一个配置错误,但我看不出哪里或哪里做错了。

感谢那些看过这篇文章的人。

我知道这一定是我做的。碰巧,更改下面的 conversionPattern 字符串

<parameter>
    <parameterName value="@unit_name" />
    <dbType value="String" />
    <size value="200" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%property(Unit_Name)" />
    </layout>
</parameter>

<parameter>
    <parameterName value="@unit_name" />
    <dbType value="String" />
    <size value="200" />
    <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%property{Unit_Name}" />
    </layout>
</parameter>

已解决问题。或者,如果您仍然看不到它。我将“%属性(Unit_Name)”更改为“%属性{Unit_Name}”。