c# - Log4Net,如何将自定义字段添加到我的日志记录中

标签 c# log4net appender

我使用 log4net.Appender.AdoNetAppender appender。
我的 log4net 表有以下字段 [Date]、[Thread]、[Level]、[Logger]、[Message]、[Exception]

我需要向 log4net 表添加另一个字段(例如 SalesId),但是我如何在我的 xml 和代码中指定以在记录错误或信息消息时记录“SalesId”?

例如log.Info("SomeMessage", SalesId)

这是 log4net xml

  <appender name="SalesDBAppender" type="log4net.Appender.AdoNetAppender">
    <bufferSize value="1" />
    <connectionType value ="System.Data.SqlClient.SqlConnection" />
    <connectionString value="Data Source=..." />
    <commandText value="INSERT INTO Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception)" />
    <parameter>
      <parameterName value="@log_date" />
      <dbType value="DateTime" />
      <layout type="log4net.Layout.RawTimeStampLayout" />
    </parameter>
    <parameter>
      <parameterName value="@thread" />
      <dbType value="String" />
      <size value="255" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%thread" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@log_level" />
      <dbType value="String" />
      <size value="50" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%level" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@logger" />
      <dbType value="String" />
      <size value="255" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%logger" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@message" />
      <dbType value="String" />
      <size value="4000" />
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%message" />
      </layout>
    </parameter>
    <parameter>
      <parameterName value="@exception" />
      <dbType value="String" />
      <size value="2000" />
      <layout type="log4net.Layout.ExceptionLayout" />
    </parameter>
  </appender>

最佳答案

1) 修改命令文本:INSERT INTO Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception],[MyColumn]) VALUES (@log_date, @thread、@log_level、@logger、@message、@exception、@CustomColumn)

2)为自定义列添加参数定义:

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

3) 然后使用 log4net 的上下文之一将值传递给参数:

// thread properties...
log4net.LogicalThreadContext.Properties["CustomColumn"] = "Custom value";
log.Info("Message"); 

// ...or global properties
log4net.GlobalContext.Properties["CustomColumn"] = "Custom value";

关于c# - Log4Net,如何将自定义字段添加到我的日志记录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12139486/

相关文章:

c# - 是真的使用匿名或动态类型作为参数吗?

c# - 为什么接口(interface)不能有构造函数和析构函数?

c# - 如何使用 Log4net 将 Guid 插入数据库?

.net-2.0 - 为什么 Log4Net 在我的 Windows 服务中运行如此缓慢?

java - 在 Logback 中对 Appender 进行分组?

c# - 如何递归地将 IEnumerable<T> 转换为字符串?

c# - 将 CustomXml 绑定(bind)到 Headerpart

c# - 在 VSTO 中配置 log4net

java - 按大小和时间滚动日志

java - Logback 附加程序和 Postfix