【问题标题】:Does "Logging with slf4j at warn level", prevent the running "logger.debug(..."是否“在警告级别使用 slf4j 记录”,阻止运行“logger.debug(...”
【发布时间】:2021-02-02 04:20:34
【问题描述】:

我有一个关于根据级别处理日志行的问题;

logger.debug("hello i am a log line not so neccessary, also log level is setted WARN and some complexProcessResult-> {}",
doSomeWorkwhichTakeslongTime());

如果记录器级别设置为 WARN,它会调用进程“doSomeWorkwhichTakeslongTime()”,因为 jsonizing 一些类需要很多时间,我不想在生产中运行它。为了实现这一点,将日志级别设置为“警告”就足够了吗?

【问题讨论】:

    标签: java logging runtime slf4j


    【解决方案1】:

    不,如果你使用这个特定的方法调用,那么改变日志级别不会影响doSomeWorkWhichTakesLongTime()是否被调用。

    它不能有效果,因为Java语言规定在调用方法之前需要计算参数值。

    有两种可能的解决方法:

    “丑”的是使用isDebugEnabled()

    if (logger.isDebugEnabled()) {
        logger.debug("hello i am a log line not so neccessary, also log level is setted WARN and some complexProcessResult-> {}", doSomeWorkwhichTakeslongTime());
    }
    

    另一个有点棘手,但可能更好:在toString() 的对象中进行繁重的工作,该对象要么构造成本低,要么您无论如何都可以访问:

    logger.debug("hello i am a log line not so neccessary, also log level is setted WARN and some complexProcessResult-> {}", someObjectThatDescribesTheOutput)
    

    并且有someObjectThatDescribesTheOutput 有一个toString 方法有点像这样:

    public String toString() {
      return doSomeWorkwhichTakeslongTime();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多