log4net的,如何将自定义字段添加到我的日志 [英] Log4Net, how to add a custom field to my logging

查看:514
本文介绍了log4net的,如何将自定义字段添加到我的日志的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我用的是log4net.Appender.AdoNetAppender附加目的地。结果
我的log4net的表有以下字段 [日期],[主题],[等级],[记录器],[信息],[异常]

我需要另一个字段添加到log4net的表(如SalesId),但我怎么会在我的XML和code指定日志SalesId记录一个错误或信息消息时?

例如。 log.Info(SomeMessage,SalesId)

下面是log4net的XML

 <追加程序名称=SalesD​​BAppenderTYPE =log4net.Appender.AdoNetAppender>
    &所述; BUFFERSIZE值=1/>
    < connectionType值=System.Data.SqlClient.SqlConnection/>
    <连接字符串值=数据源= .../>
    < CommandText中值=INSERT INTO log4net的([日期],[主题],[等级],[记录器],[信息],[例外])VALUES(@log_date,@thread,@log_level,@Logger,@message ,抛出)/>
    <&参数GT;
      <参数名称值=@ LOG_DATE/>
      < D​​BTYPE值=日期时间/>
      <布局类型=log4net.Layout.RawTimeStampLayout/>
    < /参数>
    <&参数GT;
      <参数名称值=@丝/>
      < D​​BTYPE值=字符串/>
      <大小值=255/>
      <布局类型=log4net.Layout.PatternLayout>
        < conversionPattern值=%线程/>
      < /布局>
    < /参数>
    <&参数GT;
      <参数名称值=@ LOG_LEVEL/>
      < D​​BTYPE值=字符串/>
      <大小值=50/>
      <布局类型=log4net.Layout.PatternLayout>
        < conversionPattern值=%的水平/>
      < /布局>
    < /参数>
    <&参数GT;
      <参数名称值=@记录器/>
      < D​​BTYPE值=字符串/>
      <大小值=255/>
      <布局类型=log4net.Layout.PatternLayout>
        < conversionPattern值=%记录器/>
      < /布局>
    < /参数>
    <&参数GT;
      <参数名称值=@消息/>
      < D​​BTYPE值=字符串/>
      <大小值=4000/>
      <布局类型=log4net.Layout.PatternLayout>
        < conversionPattern值=%消息/>
      < /布局>
    < /参数>
    <&参数GT;
      <参数名称值=@异常/>
      < D​​BTYPE值=字符串/>
      <大小值=2000/>
      <布局类型=log4net.Layout.ExceptionLayout/>
    < /参数>
  < /附加器>


解决方案

1)修改命令文本: INSERT INTO log4net的([日期],[主题],[等级],[记录仪] [信息],[例外],[MyColumn])VALUES(@log_date,@thread,@log_level,@Logger,@message,抛出,@CustomColumn)

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

 <&参数GT;
   <参数名称值=@ CustomColumn/>
   < D​​BTYPE值=字符串/>
   <大小值=255/>
   <布局类型=log4net.Layout.PatternLayout>
      < conversionPattern值=%{属性} CustomColumn/>
  < /布局>
< /参数>

3)然后使用log4net的的上下文值传送到参数之一:

  //线程性能...
log4net.LogicalThreadContext.Properties [CustomColumn] =自定义值;
log.Info(信息);// ...或全局属性
log4net.GlobalContext.Properties [CustomColumn] =自定义值;

I use the log4net.Appender.AdoNetAppender appender.
My log4net table are the following fields [Date],[Thread],[Level],[Logger],[Message],[Exception]

I would need to add another field to the log4net table (e.g SalesId), but how would I specify in my xml and in code to log the "SalesId" when logging a Error or Info message?

e.g. log.Info("SomeMessage", SalesId)

Here's the 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) Modify the command text: INSERT INTO Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception],[MyColumn]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception, @CustomColumn)

2) Add the parameter definition for the custom column:

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

3) Then use one of log4net’s contexts to transfer values to the parameter:

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

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

这篇关于log4net的,如何将自定义字段添加到我的日志的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆