log4net:如何自定义要存储的数据

Bud*_*dda 11 logging log4net

我的网站提供的网络服务很少.这是我想达到的目标:

  1. 将所有数据存储在一个表中的DB中;
  2. 每条记录都应包含带有"服务/组件"名称的文本字段;
  3. 在调用任何方法时,必须存储所有收入参数;
  4. 如果发生任何异常,则必须存储所有结果参数和错误消息.

我的初衷是使用log4net.但是从这些演练(http://sadi02.wordpress.com/2008/09/15/how-to-store-log-in-database-using-log4net/,http://logging.apache.org/ log4net/release/config-examples.html)我没有看到将自定义数据添加到日志表中的简单方法.

将log4net用于此类目的是否可行?如何更改日志表架构以存储自定义数据?我应该修改log4net库的源代码吗?编写自定义功能来存储此类数据可能会更好吗?

谢谢.

Dil*_*e-O 14

根据这个讨论,这个过程非常简单.

第一步是将appender声明中的命令文本更新到配置文件中:

<commandText value="INSERT INTO Log4Net ([Date],[Thread],[Level],[Logger],[Message],[Exception],[MyColumn]) VALUES (@log_date, @thread, @log_level, @logger, @message, @exception,@MyColumn)"/>        
Run Code Online (Sandbox Code Playgroud)

下一步是为自定义列添加新参数定义:

<parameter>
   <parameterName value="@MyColumn "/>
   <dbType value="String" />
   <size value="255" />
   <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%property{MyColumn}" />
   </layout>
</parameter>
Run Code Online (Sandbox Code Playgroud)

最后,您可以通过log4net的GlobalContext属性访问该值:

log4net.GlobalContext.Properties["MyColumn"] = "MyValue";
log.Debug("My message");
Run Code Online (Sandbox Code Playgroud)

您可以根据需要为多个字段执行此操作.


Bud*_*dda 2

建议的答案都不适合我。问题是我需要有几个自定义字段。对我来说,创建不同的记录器实例或每次通过“属性”设置列值似乎太复杂了。

我将使用(实际上,已经实现的)自定义记录器将数据放入数据库中。