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

我经常见到这个问题,到底使不使用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()可以保证性能优化。

时间: 2024-10-23 18:06:38

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

SSIS 属性LoggingMode和日志记录配置的继承

在配置Package的logging时,左边的Containers,Execute SQL Task前面灰色的“√”表示Execute SQL Task继承Test Log Package的日志记录的配置.Package内的Task,Container的属性LoggingMode有三种选项:UseParentSetting,Enable和Disable. UseParentSetting表示继承Package的设置,Enable表示启动日志记录,但是需要单独配置,Disable表示不记录组件的日

在android中配置 slf4j + log4j 日志记录框架

需求: 在项目开发中,需要记录 操作日志 .起初自己写了个简单的日志记录文本写入到文本的方法,后来随着项目的膨胀,需要考虑更多的操作,开始考虑性能问题. 实现: 考虑使用 slf4j + log4j 框架来实现.slf4j 是日志记录的一个facade,支持多种日志框架.log4j是个很优秀的日志记录框架. 实现: 下载类库: 先到各主站点下载类库 slf4j 网址 :http://www.slf4j.org/download.html log4j网址: http://logging.apach

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

1. log4j中log.isDebugEnabled(), log.isInfoEnabled()和log.isTraceEnabled()作用 项目在应用log4j打印Debug,Info和Trace级别的log时需要加上对应的三个方法进行过滤,代码如下: if (log.isDebugEnabled()) { log.debug(" From: " + req.getFrom().toString() +                   " To: " +

java中开源日志记录工具log4j

日志:除了能记录异常信息,还可以记录程序正常运行时的关键信息. 使用log4j来进行日志文件记录经典步骤: 001.在项目中创建一个lib文件夹,然后将下载好的jar包copy到该文件夹下 002.对已经copy过来的jar包,点击右键,然后执行下图操作, 项目中就会多出一个引入外部Library的项目 003.在src目录下创建一个名称为log4j.properties文件 004.编写,粘贴已经写好的配置文件内容,编码方式可以做下修正.对配置文件点击右键→属性→other→utf-8,然后应

log4j教程 11、日志记录到文件

要写日志信息到一个文件中,必须使用org.apache.log4j.FileAppender.有以下FileAppender的配置参数: FileAppender配置: 属性 描述 immediateFlush 标志的默认设置为true,这意味着输出流的文件被刷新,在每个追加操作 encoding 它可以使用任何字符编码.默认情况下是特定于平台的编码方案 threshold 这个 appender 阈值级别 Filename 日志文件的名称 fileAppend 默认设置为true,这意味着记录

【学习笔记】开源日志记录工具log4j使用方法

一.在MyEclipse中使用log4j的步骤比较简单,主要分为以下四个步骤: 1.在项目中加入log4j所使用的jar文件. 2.创建log4j.properties文件. 3.编写log4j.properties文件,配置日志文件. 4.在程序中使用log4j记录日志信息. 二.日志根据记录内容的不同,主要分成以下三类: 1.SQL日志:记录系统执行的SQL语句. 2.异常日志:记录系统运行中发生的异常事件. 3.业务日志:记录系统运行过程,如用户登录.操作记录. 三.log4j的下载 要使

基于Log4j完成定时创建和删除日志的方法

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 Log4j作为常用的日志生成工具,其清楚日志的策略缺十分有限.只有在RollingFileAppender中可以通过设置MaxFileSize和maxBackupIndex属性来指定要保留的日志文件大小以及个数,从而实现自动清除. 但是实际生产中,我们的真实的需求常常是定时生成日志,然后保留最近几天的日志,历史日志需要及时清理.可是Log4j中的DailyRo

log4j学习(三)——AOP日志

上篇讲到了,通过log4j在自己计算机上生成日志文件.这篇主要是和spring的AOP整合起来,将日志作为一个切面横切到系统中. 一).相关知识: Log4j: Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件,甚至是套接口服务器.NT的事件记录器.UNIX Syslog守护进程等:我们也可以控制每一条日志的输出格式:通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程.最令人感兴趣的就是,这些可以通过一个

java Web应用配置log4j日志记录

第一步:首先建立一个WEB工程,去log4j官网下log4j的JAR包导入到工程的lib目录下 第二步:在src目录下建一个log4j.properties 文件,文件命名可以由自己,只是记加载时候和这里名字一致就行: log4j.properties  里边的内容如下: ### set log levels ### log4j.rootLogger = debug,stdout,E log4j.appender.stdout = org.apache.log4j.ConsoleAppender