转自: http://huangxx.iteye.com/blog/190693

在使用log4j,common-log这样的log框架时,发现很多代码中这样写 
if   (log.isDebugEnabled())   { 
          log.debug( "xxxx "); 
}

我很奇怪,为什么要与log.isDebugEnabled()?既然log.debug()在没有指定输出级别为DEBUG时不会有输出,为什么还要在前面加一个isDebugEnabled()的判断?

为了效率,如果上述那个代码那么简单是没有必要的 

但是如果这样
if (log.isDebugEnabled()) {
log.debug(buildFullString());
} 如果这个buildFullString效率不太高,那么如果直接写log.debug(buildFullString());的话 虽然它不会打印语句,但是buildFullString还是被执行了,这样就白费了功夫 所以加上isDebugEnabled就可以避免执行buildFullString了 这个方法一般用在认为buildFullString这个函数效率不太高的情况下

在log.debug("****")的时候,会先去构造参数的执行结果。如果参数是一个函数表达式,则先回执行函数,然后再判断是否是debug级别。根据debug级别选择是否输出结果。

 public void debug(Object message, Throwable t) {
if(!this.repository.isDisabled()) {
if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) {
this.forcedLog(FQCN, Level.DEBUG, message, t);
} }
}

这是log4j中的debug源码,假设我们的代码是:

log.debug(buildDebugInfo());
.........
buildDebugInfo()
{ doMuchThings(); }
log.debug(buildDebugInfo());在执行的时候,需要先执行buildDebugInfo(),将执行结果传入到debug()中的message参数中,然后才判断是否需要打印。 
 

log.isDebugEnabled()的使用的更多相关文章

  1. Java日志框架中真的需要判断log.isDebugEnabled()吗?

    在项目中我们经常可以看到这样的代码: if (logger.isDebugEnabled()) { logger.debug(message); } 简单来说,就是用isDebugEnabled方法判 ...

  2. log4j中isDebugEnabled(), log.isInfoEnabled()和log.isTraceEnabled的封装

    1. log4j中log.isDebugEnabled(), log.isInfoEnabled()和log.isTraceEnabled()作用 项目在应用log4j打印Debug,Info和Tra ...

  3. isDebugEnabled有什么用?

    这几天在读Spring MVC源码时,发现了如下代码: if (logger.isDebugEnabled()) { logger.debug("Using ThemeResolver [& ...

  4. C#关于log4net(Log For Net)

    1       介绍 log4net(Log For Net)是Apache开源的应用于.Net框架的日志记录工具,详细信息参见Apache网站.它是针对Java的log4j(Log For Java ...

  5. log log4j配置

      log4j配置 日志路径: web方式:web.xml <context-param> <param-name>log4jConfigLocation</param- ...

  6. 聊聊flink的log.file配置

    本文主要研究一下flink的log.file配置 log4j.properties flink-release-1.6.2/flink-dist/src/main/flink-bin/conf/log ...

  7. Log4j中为什么设计isDebugEnabled()方法

    转自:https://www.jianshu.com/p/e1eb7ebfb21e 先看下面的代码,在真正执行logger.debug()之前,进行了logger.isDebugEnabled()的判 ...

  8. Log4j2 - 日志框架中isDebugEnabled()的作用

    为什么要使用isDebugEnabled() 之前在系统的代码中发现有时候会在打印日志的时候先进行一次判断,如下: if (LOGGER.isDebugEnabled()) { LOGGER.debu ...

  9. 终论到底该不该写isDebugEnabled

    以前: 很多日志框架都不支持{}模板的写法(如Log4j1.X, Apache Commons Logging),于是只能通过字符串拼接来输出日志内容: log.debug("debug日志 ...

随机推荐

  1. 网页设定固定背景图片(抄袭自百度FM)

    这个新技能,我是从百度FM中学习到的. 在网页中,有一个id为"body-bg"的层, html代码: <div id="body-bg" style=& ...

  2. T-SQL通过触发器创建级联更新·级联删除

    create trigger t_table_a on table_a for update,dalete begin if exists(select 1 from inserted) update ...

  3. MVC小系列(六)【无刷新的验证码】

    做个无刷新的验证码功能: 第一步:首先,在公用项目中建立一个生成图片验证码的类型ValidateCode /// <summary> /// 生成验证码对象 /// </summar ...

  4. Library string Type

    The string type supports variable-length character strings.The library takes cares of managing memor ...

  5. 暑假集训(1)第八弹 -----简单迷宫(Poj3984)

    Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, ...

  6. JVM - 内存溢出问题排查相关命令jcmd jmap

    jcmd http://docs.oracle.com/javase/8/docs/technotes/tools/windows/jcmd.html jcmd-l  列出正在执行的JAVA进程ID ...

  7. <汇编语言系列>计算机硬件系统与汇编

    寒假时,有幸拜读了卡内基-梅隆大学(CMU)的Randal E.Bryant 和 David R.O'Hallaron的名著——深入理解计算机系统(Computer System: A Program ...

  8. PL/SQL学习(六)触发器

    原文参考:http://plsql-tutorial.com/ 创建语法: CREATE [OR REPLACE ] TRIGGER trigger_name {BEFORE | AFTER | IN ...

  9. 用javascript操作xml(三)关于Jquery的html()不兼容IE的解决办法

    当 $("#xxx").html(data); 不兼容,方法替换为 document.getElementById("xxx").innerHTML=data;

  10. Xshell配色方案

    几个比较喜欢的Xshell配色方案,备份记录下 [Names] count=1 name0=SolarizedDark [SolarizedDark] text(bold)=839496 magent ...