如何解决log4j,嵌套诊断上下文
| 我有一个在其线程中运行的MySession对象(一个普通的Session,而不是Web)。我想使用NDC类,以便包括从MySession的字段中获取的一些数据:创建它的用户,开始时间等。我希望将“ render \”字段“呈现”到一条消息中。有可能还是仅消息支持它? 提前致谢public class MySession {
String userName;
Date startTime;
public void doSomething() {
NDC.push(this); //cannot do something like this?
NDC.push(this.userName
+ \" \" + startTime.toString()); //or should I do this?
}
}
解决方法
NDC只是将\“ context \”(自由格式字符串)添加到所有日志消息(根据日志记录格式可能会输出也可能不会输出)。嵌套部分意味着
NDC.pop()
返回到上一个(上一层)上下文。
尽管如此,上下文在任何给定的点都是一个自由格式的字符串-因此,您正确地必须将类似this.username + \'.\' + this.startTime.toString()
的内容压入,如第二个示例中所示。您可以从API中看到push
带有String参数;仅在成为日志消息的一部分(隐式为字符串)的情况下使用此上下文,因此接受不同类型的任意对象不会有任何好处。
,您几乎可以将所需的任何文本(或任何对象的文本表示形式)放入NDC中。不支持将对象渲染到NDC中,因为toString()
几乎总是(至少应该)。 NDC中过多和/或复杂的内容会使日志更难以阅读,因此建议将NDC的内容限制在最低限度。
例如。在您的情况下,将会议开始时间放到每条日志消息中将是过大的(并且可能也是模棱两可的)。最好只将某种唯一的会话ID推送到NDC中(如果有的话),然后在设置后立即在专用消息中记录任何其他会话详细信息,例如用户名,启动时间NDC。这仍然允许您从日志中检索所有必要的会话数据,并为任何特定的日志消息标识相应的会话。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。