【问题标题】:add object instance id to log4net log将对象实例 ID 添加到 log4net 日志
【发布时间】:2011-07-02 05:55:59
【问题描述】:

我正在尝试使用 log4net 在集群上进行分布式日志记录。

我的软件堆栈由孤立的代理组成,这些代理散布在具有唯一实例 ID 的集群周围。我想将记录到正在生成的日志中的每个对象的实例 ID 添加到正在生成的日志中,但我希望所有继承的类对对象实例 ID 使用相同的值,我遵循向每个类添加静态记录器的最佳实践我的,即使一个类继承自基类,它也会有自己的记录器,如下所示

 private static ILog _Log =LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

所以我不能使用记录器名称。此外,我不想将对象实例 ID 添加到我创建的每个日志中,我希望它会使用 logn4net 日志自动完成。

我可以使用记录器上下文,但实例 ID 不是全局的,也不属于特定线程。我该怎么办?

【问题讨论】:

  • 您是说您不想将实例 ID 添加到每条日志消息中吗?如果你不想要它,你会想要它在哪里?如果你确实想要它,你认为你能在每个你试图写日志条目的地方得到那个值吗?
  • 我确实想要日志中的对象 ID,并且我能够在需要记录它的地方获取它,但问题是不同继承级别的日志。如果我有一个 C:B:A 类 C,并且 A 和 B 根据它们的类型有自己的记录器,我如何使 C 类的实例用它自己的对象 id 记录事物,而我只会设置该对象 id该对象一次,并且 C B 或 A 级别的每个日志都将使用该对象 ID?

标签: log4net


【解决方案1】:

您可以将嵌套诊断上下文添加到您的业务类中,以提供有关正在发生的事情的上下文信息。您的日志消息将使用 NDC 信息进行丰富,例如您可以将当前 id 添加到 NDC 上下文中,当您登录时,日志消息将被丰富。

using(NDC.Push("my context message, and my id is:"+object.id))
{
    ... all log calls will have 'my context message, and my id is:...' included ...
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 2011-09-01
    • 2023-04-06
    • 1970-01-01
    相关资源
    最近更新 更多