最近在项目中,常有意无意的看到这样的代码
if(log.isDebugEnabled()){ log.debug("msg"); }
虽然从方法的命名规则大概知道是什么意思,但不知为什么要这样写?
通过百度搜索,大概理解这样写为提高代码的效率,这样写为什么能提高效率呢?
原因在于log日志具有以下5种正常级别
org.apache.log4j.Level类提供以下级别,但也可以通过Level类的子类自定义级别。 Level 描述 ALL 各级包括自定义级别 DEBUG 指定细粒度信息事件是最有用的应用程序调试 ERROR 错误事件可能仍然允许应用程序继续运行 FATAL 指定非常严重的错误事件,这可能导致应用程序中止 INFO 指定能够突出在粗粒度级别的应用程序运行情况的信息的消息 OFF 这是最高等级,为了关闭日志记录 TRACE 指定细粒度比DEBUG更低的信息事件 WARN 指定具有潜在危害的情况
优先级关系:
分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、TRACE、ALL或者您定义的级别。
Log4j建议只使用四个级别,优先级从高到低分别是ERROR、WARN、INFO、DEBUG
当在log4j.properties种设置:log4j.rootLogger=info,stdout
if(log.isDebugEnabled()){//此条件为假,if的语句体不执行,可以有选择的执行打印日志,从而提高了代码执行效率 log.debug("msg"); }
示例:
public class TestLog { public static final Logger log = LoggerFactory.getLogger(TestLog.class); public static void main(String[] args) { //int count = 0; log.info("-------begin----"); if(log.isDebugEnabled()){ log.debug("debug"); } log.info("-------end------"); } }
当设置:log4j.rootLogger=debug,stdout时输出结果:
2017-07-31 22:12:49,856-5p TestLog - -------begin---- 2017-07-31 22:12:49,871-5p TestLog - debug 2017-07-31 22:12:49,871-5p TestLog - -------end------
当设置:log4j.rootLogger= info,stdout时输出结果:
2017-07-31 22:28:08,555-5p TestLog - -------begin---- 2017-07-31 22:28:08,558-5p TestLog - -------end------
使用{}写法也可以到达效果:
public static void main(String[] args) { //int count = 0; log.info("-------begin----"); //if(log.isDebugEnabled()){ // log.debug("debug"); //} log.debug("debug{}"); log.info("-------end------"); }
输出结果一样,大家可以动手尝试下,书写代码百遍,其义自现。