文档章节

何时使用log4j的isDebugEnabled属性来进行日志记录?

五大三粗
 五大三粗
发布于 2015/08/25 10:33
字数 378
阅读 156
收藏 2

我经常见到这个问题,到底使不使用idDebugEnabled属性。这个问题经常被争论,而焦点往往是性能。

答案很简单。既然有这个属性,当然是拿来使用的。但是使用的时候需要注意。

例如,在我的代码中,我如下使用。

Java代码
  1. log.debug("I am there");  

这个例子是一个好的实践。

然而如果我按照如下的方式来使用,我觉得就是不必要的了。
 

Java代码
  1. // Not good practise   
  2. if (log.isDebugEnabled()){   
  3.     log.debug("I am there");    
  4. }   

那么是为什么呢?这是因为类Category中的debug方法(由Log4j库的Logger类继承)已经检查了日志中的模式(即当前的日志级别)。org.apache.log4j.Category类中debug的代码如下:

Java代码
  1. public void debug(Object message) {   
  2. if(repository.isDisabled(Level.DEBUG_INT))   
  3. return;   
  4. if(Level.DEBUG.isGreaterOrEqual(this.getEffectiveLevel())) {   
  5. forcedLog(FQCN, Level.DEBUG, message, null);   
  6. }   
  7. }   

因此上面的例子中,我们可以不使用它来判断。那么什么时候需要使用isDebugEnabled属性呢?

例如,你有一个很 长的参数要在debug模式下输出:

Java代码
  1. // Bad Practise   
  2.  log.debug("XML "+Tree.getXMLText());   

在这样的情况下,可以清楚的说,不要使用它。如果Tree.getXMLText方法从App中获取出来,但是没有使用的话,这样对性能会有很大的影响。因此,应该按照如下的方式来使用:

Java代码
  1. // Good Practise   
  2. if (log.isDebugEnabled()){   
  3.     log.debug("XML "+Tree.getXMLText());   
  4. }  

因此,在上面的例子中,使用log.isDebugEnabled()可以保证性能优化。

© 著作权归作者所有

五大三粗
粉丝 163
博文 2273
码字总数 4723756
作品 0
广州
程序员
私信 提问
为什么使用 SLF4J 而不是 Log4J 来做 Java 日志

每个Java开发人员都知道日志记录对Java应用的重要性,尤其是对服务端应用,而且其中许多人都已经熟悉了各种记录日志的库,比如java.util.logging,Apache的log4j,logback,然而如果你不知道S...

lwei
2013/10/21
63.9K
12
Log4j 2.0 的新特性

不久之前,著名的日志框架log4j发布了一个新的主要版本。从第一个alpha版本诞生以来,log4j已经发布了4个版本。log4j 2较之前的log4j 1有了很大的改动。因此,虽然log4j 2s现在还很年轻,但它...

oschina
2012/12/07
20.7K
2
Apache Log4j Audit 1.0.1 发布,基于 Log4j 的日志框架

Log4j Audit 1.0.1 发布 Log4j Audit 提供了一个日志框架,用于定义监听事件。然后使用 Log4j 记录它们。 该框架侧重于定义事件并为应用程序提供记录机制。Log4j Audit 通过定义自己的 Audi...

程六金
2018/12/20
0
0
commons-logging 和 log4j 之间的关系

我们在做项目时,日志的记录是必不可少的一项任务,而我们通常是使用 apache 的 log4j 日志管理工具。然而,在项目中,我们经常会看到两个 jar 包:commons-logging.jar 和 log4j.rar。为什么...

飓风2000
2014/05/26
0
4
日志审计框架 - Apache Log4j Audit

Log4j Audit 提供了一个框架,用于定义审计事件,然后使用 Log4j 记录它们。该框架侧重于定义事件并为应用程序提供记录它们的简单机制,允许产品为记录的事件提供一致性和有效性。它不关注日...

匿名
2018/12/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

idea运行spring boot(推荐)

下载idea 注册激活:http://idea.lanyus.com/ 照着网上的步骤创建spring boot,这里记录存在的坑 首先gradle需要在本地配置环境变量,配制成本地的,联网下载的话要很久很久 第一次不要使用g...

安卓工程师王恒
6分钟前
1
0
java final学习笔记

代码如下:class Circle{ double r; double pi=3.14; public Circle(double r) { this.r=r; } public void getArea() { System.out.......

hellation_
24分钟前
0
0
JavaConfig版

中心思想:去xml配置文件。 在Spirng Boot和Spring Cloud中,大量使用了注解与JavaConfig。 xml文件 对应的Java类 spring.xml SpringConfig.java spring-mvc.xml SpringMvcConfig.java web.x...

流小文
43分钟前
4
0
Go 定时器内部实现原理剖析

前言 前面我们介绍了一次性定时器Timer和周期性定时器Ticker,这两种定时器内部实现机制相同。创建定时器的协程并不负责计时,而是把任务交给系统协程,系统协程统一处理所有的定时器。 本节...

恋恋美食
48分钟前
1
0
分布式协调神器 ZooKeeper 之整体概述

ZooKeeper 最早起源于雅虎研究院的一个研究小组。当时,雅虎内部很多大型系统基本都需要依赖一个类似的系统来进行分布式协调,但是这些系统往往都存在分布式单点问题。所以,雅虎的开发人员就...

别打我会飞
49分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部