使用slf4j禁用特定的日志输出

时间:2014-12-30 20:24:45

标签: java logging slf4j

我想在运行测试时禁用特定的日志输出(在本例中为InterruptedException日志记录),但我不想在生产中禁用它。
这样做的原因是,即使在测试被拆除时通过测试,它也会产生很多噪音。

在下面的代码中,我在运行测试时禁用log.warn("Handling InterruptedException", failure)。目前我将一个标志isLogInterruptedExceptionsEnabled传递给此类,该类在代码中被检查,但由于几个原因,这很难看。

@Override
public void run() {
    log.debug("Enter run method");

    try {
        while (!Thread.currentThread().isInterrupted()) {
            try {
                // some code
            } catch (Throwable failure) {
                if (!isCausedByInterruptedException(failure)) {
                    log.error("Handling failure", failure);
                } else if (isLogInterruptedExceptionsEnabled) {
                    log.warn("Handling InterruptedException", failure);
                }

                // some code
            }
        }
    } catch (InterruptedException ex) {
        log.warn("Exception handling was interrupted. Exiting Supervisor.", ex);

        // some code
    }

    log.debug("Exit run method because interrupted");
}

有没有更好的方法来禁用某些特定的日志记录输出? 也许还有可能​​不记录完整的strack跟踪,这也是一个不错的选择。 我也在考虑将日志级别设置为ERROR,这也是一个选项,但在其他情况下可能没有。

1 个答案:

答案 0 :(得分:0)

将日志属性文件(例如log4j.properties,如果使用Log4J)添加到测试依赖项(例如./src/test/resources,如果使用Maven),它将日志记录级别设置为降低级别(关闭偶数)。如果您不需要详细的日志记录测试,这是理想的,因为您依赖断言并且很容易切换回来进行调试测试。