【问题标题】:Log4Net, how to add a custom field (variable) to my loggingLog4Net,如何将自定义字段(变量)添加到我的日志记录
【发布时间】:2016-03-04 11:32:44
【问题描述】:

我指的是优秀的帖子:

Log4Net, how to add a custom field to my logging

但它并没有给我完整的解决方案。

记录“这是一个测试”之类的字符串没有问题,但如果我想记录一个变量,它会响应(null)。

这是我截断的代码不起作用:

log4net.GlobalContext.Properties["versionid"] = Variables.IDVERSION;

这是我的工作代码:

log4net.GlobalContext.Properties["versionid"] = " This is a test";

虽然,IDVERSION 是在我的代码 c# 中系统更新的公共属性。

有没有人知道如何解决这个问题?我想我已经接近解决方案了。

【问题讨论】:

  • 您是在将Variables.IDVERSION 的值分配给log4net 属性之前还是之后设置它?请注意,log4net 不会跟踪您提供的任何新值 - 您也需要每次都更新 log4net 属性。
  • 我在第一次尝试之后分配了变量。现在,我在更新 log4net 属性之前分配了变量的值。它运行良好。简单而合乎逻辑。谢谢你的帮助。下次我应该多想一点。:-)

标签: c# log4net log4net-appender


【解决方案1】:

目前你称之为:

log4net.GlobalContext.Properties["versionid"] = Variables.IDVERSION;

该属性将持有Variables.IDVERSION的值此时。它不会自动跟踪Variables.IDVERSION 变量的更新。

因此,如果您稍后在代码中设置Variables.IDVERSION,则需要再次对Properties["versionid"] 进行赋值。

【讨论】:

  • 很好的解释。在第一次尝试中,我在之后分配了变量。现在,我在更新 log4net 属性之前分配了变量的值。它运行良好。简单而合乎逻辑。谢谢你的帮助。下次我应该多想一点。:-)
【解决方案2】:

当 log4net 评估上下文属性时,它会调用属性值的 .ToString() 方法。因此,如果您将引用作为值,则可以拥有动态属性值(我相信您的 idversion 字段是值类型,例如 Int?)。

详情请见https://logging.apache.org/log4net/release/manual/contexts.html

【讨论】:

  • 谢谢,这只是先声明变量然后刷新 log4net 自定义属性的顺序问题。现在按预期工作。毫无疑问,log4net 很棒。
猜你喜欢
  • 2012-08-21
  • 1970-01-01
  • 2015-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多