转自: 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. 前后端分离 接口管理神器——Rap本地搭建

    我这里要用做mockserver的就是rap了,rap结合了团队管理,项目管理,文档编写.Mock.js.可视化.接口过渡.文档历史版本(赞).mock插件(线上线下切换就只需要注释一句代码就OK), ...

  2. ASP.NET问题处理---“数据请求超时错误“”

    数据请求超时,一般有2中解决方式: 1.页面AJAX处理数据时延长时间: 2.后台数据库连接取数据时延长时间. 由于我的后台数据库连接取数据为循环读取数据,所以不存在超时问题,这里具体说说如何修改AJ ...

  3. 【转】【JavaScript】禁用backspace键的后退功能,但是可以删除文本内容

    在JavaScript中添加以下代码,就可实现 禁用backspace键的后退功能,但是可以删除文本内容 // 禁用backspace键的后退功能,但是可以删除文本内容 document.onkeyd ...

  4. ASC码 .

    有些时候需要用到一些字符的ASC码,到网上查找太麻烦,现在记录下来. 第128-255号为扩展字符(不常用) Dec Hx Oct Char   Dec Hx Oct Char Dec Hx Oct ...

  5. mac最常用终端命令

    1分钟,快速复习下: pwd (显示当前所在路径) ls -l  (列出文件的详细信息,如创建者,创建时间,文件的读写权限列表等等) touch `filename`(创建文件) open `file ...

  6. mongodb write 【摘自网上,只为记录,学习】

    mongodb有一个write concern的设置,作用是保障write operation的可靠性.一般是在client driver里设置的,和db.getLastError()方法关系很大 一 ...

  7. bc

    调试脚本报错bc: command not found 原因是因为这个linux环境里没有安装计算器工具bc 用 apt-get install bc 或者 yum -y install bc 安装后 ...

  8. (zzuli)1907 小火山的宝藏收益

    Description 进去宝藏后, 小火山发现宝藏有N个房间,且这n个房间通过N-1道门联通. 每一个房间都有一个价值为Ai的宝藏, 但是每一个房间也都存在一个机关.如果小火山取走了这个房间的宝藏, ...

  9. ASP.NET获取服务器文件的物理路径

    如下: string fullpath = context.Server.MapPath("hello.htm"); //得到hello.htm的全路径 string conten ...

  10. SVG

    目前SVG在国内的使用并不常见,并且关于svg的相关js库也不多,这里指出两款svg的库Snap.svg和svg.js,Snap.svg张鑫旭的博客上有关于他的使用APi http://www.zha ...