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}”。
我看到了多个关于如何执行此操作的链接,我的版本在技术上是可行的。
示例: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}”。