我有一个使用多个不同Java类的应用程序,并且希望能够为记录消息提供调试上下文。
这个(应用程序和数据特定的)上下文(基本上是一个字符串)将由每个类单独构造或检索,并将传递给相应的日志记录调用,例如
logger.debug(context + ", whatever error message");
所以,我的问题是,在整个应用程序中实现此功能的最佳模式是什么?
我正在考虑让所有需要支持上下文相关日志记录的类使用一些适当的方法实现Java接口,例如。
public interface ContextSensitive
{
public String getContext();
public String setContext();
}
其中 setContext()
方法对于从对象(例如)具有上下文的firstObject实例化对象(例如)secondObject的情况很有用,但secondObject没有。所以,firstObject也会做类似
secondObject = new SecondObject();
secondObject.setContext(context);
以上是否有意义,或者我应该做些更好的事情?
我一直在考虑的另一种方法是在日志库周围编写一个包装器来提供这个功能,但是我认为这个方法没有任何价值,与我上面描述的相比,基于{{1} } interface。
如果有任何必须解决同一问题的开源项目的例子,我将不胜感激。
非常感谢!
答案 0 :(得分:3)
我怀疑你正在寻找类似于MDC(映射的诊断上下文)的东西,这是log4j,logback和slf4j框架的一个特性。在方法调用之前,上下文只能设置一次,然后可以配置日志框架以生成包含上下文字段的日志消息。
答案 1 :(得分:1)
这是cross-cutting concern的完美示例,因此请使用AOP。
答案 2 :(得分:1)
您要记录的信息是什么?
如果是性能分析,请查看What is the best macro-benchmarking tool / framework to measure a single-threaded complex algorithm in Java?,列出了一些使用日志记录机制的工具。