我有两个我想跟踪的公共方法。其中一种方法反复调用其他方法。我想要做的只是跟踪从外部调用的方法。动态跳过日志消息
这里有一个简单的类来证明我的意思:
public class LoggingExample {
private static final Logger logger = LoggerFactory.getLogger(LoggingExample.class);
public static final String USER_ROOT = "/home/waisbrot";
/** could be called by fileExistsRobust *or* from outside */
public static boolean fileExists(String filename) {
logger.trace("Checking for file {}", filename);
File f = new File(filename);
return f.exists();
}
/** always gets called from outside */
public static boolean fileExistsRobust(String filename) {
logger.trace("Checking for any varient of {}", filename);
if (fileExists(filename))
return true;
for (String prefix : prefixes) { // this list is 100 items long
if (fileExists(prefix + filename));
return true;
}
return false;
}
}
其他地方在我的代码,我可以称之为fileExists
,在这种情况下,我想获得印刷其日志消息(假设我跟踪它) 。但是如果我打电话fileExistsRobost
比我想那日志消息,而不是fileExists
。
我想跟踪这两种方法,但是当我打电话给第二个时,我会被埋在输出中。我希望Logback可以被配置来理解我想要的,但是我没有看到任何有用的文档。当我输入fileExistsRobust
然后在fileExists
中测试它时,我可以翻转一个标志,但是在多个线程中这会变得很难看(因为这些是静态方法),并且它似乎开始用大量日志记录基础设施来污染该类。我可以使用MDC来存储信息,但这似乎是滥用MDC。
之前有人遇到过这种情况吗?你是怎么处理的?
我喜欢你首先提到的私人内部解决方案。 – 2013-03-19 01:44:55