是否 "Logging with slf4j at warn level"、防止 运行 "logger.debug(..."
Does "Logging with slf4j at warn level", prevent the running "logger.debug(..."
我有一个关于根据级别处理日志行的问题,例如;
logger.debug("hello i am a log line not so neccessary, also log level is setted WARN and some complexProcessResult-> {}",
doSomeWorkwhichTakeslongTime());
如果记录器级别设置为 WARN,那么它会调用进程“doSomeWorkwhichTakeslongTime()”,因为对一些 类 进行 jsonizing 会花费很多时间,我不想 运行 在生产中这样做。为此,将日志级别设置为“警告”是否足够?
不,如果您使用此特定方法调用,那么更改日志级别不会影响 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();
}
我有一个关于根据级别处理日志行的问题,例如;
logger.debug("hello i am a log line not so neccessary, also log level is setted WARN and some complexProcessResult-> {}",
doSomeWorkwhichTakeslongTime());
如果记录器级别设置为 WARN,那么它会调用进程“doSomeWorkwhichTakeslongTime()”,因为对一些 类 进行 jsonizing 会花费很多时间,我不想 运行 在生产中这样做。为此,将日志级别设置为“警告”是否足够?
不,如果您使用此特定方法调用,那么更改日志级别不会影响 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();
}