DEBUG级别下日志处理:是否需调用isTraceEnabled?trace日志疑问
问题
我的应用运行在DEBUG日志级别,请问这是否意味着以下代码中的所有操作都会被执行,但trace日志不会被打印?还是说在记录这段日志前,我需要调用isTraceEnabled?
for (Element element : foreignMarkups) { log.trace("Foreign Markup name = {}", element.getName()); log.trace("Foreign Markup value = {}", element.getText()); log.trace("Foreign Markup namespace = {}", element.getNamespace()); }
回答
- 当应用处于DEBUG日志级别时,trace级别的日志肯定不会被打印,但代码里的
element.getName()、element.getText()、element.getNamespace()这些方法依然会被执行——哪怕日志最终没输出。 - 如果这些方法的执行成本较高(比如涉及复杂计算、IO操作),想要避免不必要的资源消耗,就需要在打印trace日志前调用
isTraceEnabled()做判断,修改后的代码如下:
for (Element element : foreignMarkups) { if (log.isTraceEnabled()) { log.trace("Foreign Markup name = {}", element.getName()); log.trace("Foreign Markup value = {}", element.getText()); log.trace("Foreign Markup namespace = {}", element.getNamespace()); } }
- 总结:不加判断的话,日志不输出但方法调用照常执行;加判断可以彻底跳过这些方法调用和日志语句的执行,节省系统资源。
内容的提问来源于stack exchange,提问作者user352290
相关产品推荐
相关产品推荐

