【问题标题】:Dynamically skipping logging messages动态跳过日志消息
【发布时间】:2013-03-17 17:28:34
【问题描述】:

我有两个要跟踪的公共方法。其中一种方法反复调用另一种方法。我想做的是只跟踪从外部调用的方法。

这是一个简单的类来说明我的意思:

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 的滥用。

以前有人遇到过这种情况吗?你是怎么处理的?

【问题讨论】:

    标签: java slf4j logback


    【解决方案1】:

    我假设您能够更改代码。那么我认为最简单的方法是通过引入另一个 internalFileExists(String filename) 或使用日志工具重载 fileExists(String filename) 来避免该问题:

    public static boolean fileExists(String filename, boolean doLog) {
       if (doLog) logger.trace("Checking for file {}", filename);
       File f = new File(filename);
       return f.exists(); 
    }
    

    并让 fileExistsRobust 使用 doLog = false 的重载版本,而单参数版本重定向到 fileExists(filename, true)。

    这并没有真正解决问题,而是缓解了问题。

    【讨论】:

    • 我喜欢你首先提到的私有内部解决方案。
    猜你喜欢
    • 2017-08-26
    • 1970-01-01
    • 2021-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 2018-12-20
    相关资源
    最近更新 更多