区分log4net输出中的源上下文

时间:2009-07-15 16:44:16

标签: c# logging log4net

我对log4net相当新,我似乎无法找到任何明确的例子来处理这种情况。

我有一个通信堆栈,由三层组成:硬件,传输和协议。这三个层包含在manager类中。就代码的用户而言,他们使用硬件类型(串行,以太网,SSL等)创建管理器并提供地址。可以有多个管理器实例,每个实例都连接到不同的目标。

我希望我的输出能够给出特定消息来自哪个连接的上下文(127.0.0.1或COM5等)。 ThreadContext没什么用处,因为可以从任何线程调用管理器,每个层都在自己的线程上运行。

有没有办法根据对象的特定实例设置上下文?或者有更好的方法来处理输出格式吗?

2 个答案:

答案 0 :(得分:1)

添加额外的每个消息上下文的一种方法是不仅记录字符串消息,还创建自己的消息对象,其中包含日志信息和连接硬件类型(以及您想要包含的任何其他信息)。

您可以找到此here的示例。

另一种选择可能是使用嵌套诊断上下文:

using(NDC.Push("<Connection type>"))
{
     // perform your logging here
}

NDC数据将包含在消息中,并可以使用%ndc模式输出。但请注意,NDC将包含在其使用范围内记录的任何消息中,这可能是您考虑使用自定义消息路由的原因。

答案 1 :(得分:0)

您应该使用LogManager.GetLogger()的重载string name,这样您就可以将任何内容作为记录器名称传递。