`
ixp
  • 浏览: 12551 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Log4j之logger.isInfoEnabled()和logger.isDebugEnabled

    博客分类:
  • Java
阅读更多
1.看下apache的官方的document,在Performance下那块(From: http://logging.apache.org/log4j/1.2/manual.html)
For example, for some logger cat, writing,
logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i]));
incurs the cost of constructing the message parameter, i.e. converting both integer i and entry[i] to a String, and concatenating intermediate strings, regardless of whether the message will be logged or not. This cost of parameter construction can be quite high and it depends on the size of the parameters involved.
To avoid the parameter construction cost write:
if(logger.isDebugEnabled() { logger.debug("Entry number: " + i + " is " + String.valueOf(entry[i])); }
This will not incur the cost of parameter construction if debugging is disabled. On the other hand, if the logger is debug-enabled, it will incur twice the cost of evaluating whether the logger is enabled or not: once in debugEnabled and once in debug. This is an insignificant overhead because evaluating a logger takes about 1% of the time it takes to actually log.
In log4j, logging requests are made to instances of the Logger class. Logger is a class and not an interface. This measurably reduces the cost of method invocation at the cost of some flexibility.
Certain users resort to preprocessing or compile-time techniques to compile out all log statements. This leads to perfect performance efficiency with respect to logging. However, since the resulting application binary does not contain any log statements, logging cannot be turned on for that binary. In my opinion this is a disproportionate price to pay in exchange for a small performance gain.
2.简单来说,就是用isDebugEnabled方法判断下是能提升性能的。(From: http://blog.sina.com.cn/s/blog_616b57310100f36s.html )
if(logger.isInfoEnabled()) {      logger.info("User " + userId + " is using app " +appId);   }
为什么要加上logger.isInfoEnabled()?原因有两点。
1).直接使用logger.info("User " + userId + " is using app" + appId)来输出log,也能够达到log级别为INFO或在INFO以下时才输出:("User " + userId + "is using app " +appId),因为logger.info方法内部有判断输出级别的代码。但是在进入logger.info函数之前,("User " +userId + " is using app " + appId)这个表达式已经通过运算拼接成了一个字符串;而如果事先使用 if(logger.isInfoEnabled())进行判断,那么当log级别在INFO以上时,就能省去上述的字符串操作,在高并发和复杂log信息拼接的情况下,使用这种标准的方法输出log能够省去不小的系统开销。另外,如果构造log信息的过程需要大量字符串操作,建议使用StringBuilder来完成字符串拼接。
2).ERROR及其以上级别的log信息是一定会被输出的,所以只有logger.isDebugEnabled和logger.isInfoEnabled方法,而没有logger.isErrorEnabled方法。
分享到:
评论

相关推荐

    log4j-1.2.17.jar下载

    Log4j,作为Apache软件基金会的一个开源项目,是Java世界中最受欢迎的日志框架之一,其1.2.17版本因其稳定性和广泛兼容性而被广泛应用。本文将围绕“log4j-1.2.17.jar”这一核心组件,深入探讨其功能、配置以及在...

    Spring项目中怎么配置log4j

    log4j.logger.com.example.MyClass=DEBUG ``` 5. **添加其他输出目标**:除了控制台和文件,还可以配置日志发送到SMTP服务器、syslog等。例如,配置SMTP Appender发送错误邮件: ``` log4j.appender.A1=org....

    Log4j将System.out搞到log4j中输出四

    在程序启动时,我们可以将`System.setOut(new Log4jPrintStream(Logger.getLogger("MyCustomLogger")));`,这样`System.out.println()`调用就会被Log4j捕获并按照我们配置的方式记录。 当然,这只是基本的实现方式...

    log4j-1.2.17.jar及配置文件

    这个jar文件包含了Log4j 1.2.17的所有类和资源,是使用Log4j的基础。在Java应用程序中,我们通常会将log4j-1.2.17.jar添加到项目的类路径中,以便调用其API进行日志记录。例如,通过以下代码创建一个名为"DEBUG"的...

    log4j与web.xml的配置

    本文将详细讲解如何将Log4j整合到Web应用并通过web.xml进行配置,以实现日志信息的输出和管理。 1. **Log4j介绍** - Log4j由Apache软件基金会开发,提供了一种简单但功能强大的日志记录API,可以控制日志信息的...

    android-logging-log4j-1.0.3.jar

    `android-logging-log4j-1.0.3.jar`这个库文件就是为了解决这个问题,它提供了适配Android的Log4j实现,允许开发者在Android应用中无缝集成Log4j,并将日志信息存储到SD卡上,便于后期分析和调试。 三、集成与使用 ...

    log4j jar包

    Log4j-1.2.17是Log4j 1.x系列的一个稳定版本,尽管后续发布了Log4j 2.x,但1.2版仍被许多遗留系统和项目广泛使用。这个版本修复了一些已知的bug,提升了性能和稳定性,同时也兼容了当时的Java环境。 总结,Log4j...

    log4j-1.2.15.jar

    2. **配置文件**:创建log4j.properties或log4j.xml配置文件,设置日志级别、Appender、Layout和Filter。 3. **编程接口**:在代码中使用Logger接口创建并初始化logger对象,然后调用相应的方法(如debug(), info()...

    log4j-1.2.9.jar

    《深入理解Log4j:基于log4j-1.2.9.jar的解析与应用》 在Java开发中,日志记录是不可或缺...对于“log4j-1.2.9.jar”这个版本,掌握其核心组件和配置方式,是理解Log4j的关键,也是提升项目管理和维护能力的重要一步。

    log4j-控制指定类,包的日志级别:log4j-demo.zip

    `log4j.logger.com.example.MyClass`则指定了`com.example.MyClass`这个类的日志级别为WARN,这意味着只有WARN、ERROR和FATAL级别的日志会被输出。 如果要控制整个包,比如`com.example`下的所有类,配置如下: ``...

    log4j-1.2.17.jar csdn下载

    Log4j作为Apache的一个开源项目,是Java世界中最受欢迎的日志框架之一,其1.2.17版本因其稳定性和广泛兼容性而备受青睐。本文将围绕“log4j-1.2.17.jar”这一核心组件,深入探讨其功能、配置以及在实际项目中的应用...

    log4j.jar.rar

    这个压缩包“log4j.jar.rar”包含的是Log4j的核心库文件“log4j.jar”,这是一个Java Archive (JAR) 文件,用于封装和分发Java类、资源以及元数据。Log4j的目的是提供一种灵活且高性能的方式来处理应用程序中的日志...

    com.springsource.org.apache.log4j-1.2.16.jar

    log4j.logger.example.MyClass=WARN ``` 四、实践应用 在实际开发中,Log4j 1.2.16广泛应用于系统调试、性能监控、故障排查等场景。通过合理配置,可以有效收集运行时信息,辅助开发者定位问题,提高开发效率。...

    log4j日志驱动包

    log4j.appender.im = net.cybercorlin.util.logger.appender.IMAppender log4j.appender.im.host = mail.cybercorlin.net log4j.appender.im.username = username log4j.appender.im.password = password log4j....

    log4j-1.2.16.jar

    Log4j的配置通常通过一个名为`log4j.properties`或`log4j.xml`的文件进行,这个文件定义了Loggers、Appenders和Layouts的设置。例如,以下是一个简单的配置示例: ```properties # 配置控制台输出 log4j.rootLogger...

    log4j.properties(完整版) log4j.properties(精简版)

    - **定义特定类的日志级别**:`log4j.logger.com.example.MyClass=WARN`,将特定类的日志级别设为WARN。 **4. 精简版`log4j.properties`** 精简版的`log4j.properties`仅包含必要的配置,适用于简单场景。比如: ...

    log4j.properties配置详解

    log4j.logger.org.hibernate.ps.PreparedStatementCache=WARN log4j.logger.org.hibernate=DEBUG log4j.logger.org.logicalcobwebs=WARN ``` 这段配置的关键组成部分解释如下: 1. **根日志类别** (`log4j.root...

    logging-log4j-1.2.13.zip

    本文将深入探讨logging-log4j-1.2.13版本中的核心概念、配置和使用方法,帮助开发者更好地理解和利用这一强大的工具。 一、Log4j概述 Log4j是Java世界中的一款开源日志组件,它提供了灵活的日志记录功能,包括日志...

    log4j 1.2.17版本jar包

    在1.2.17版本中,Log4j为开发者提供了强大的日志处理能力,帮助他们追踪程序运行时的错误、警告和其他相关信息,从而提升软件的可维护性和稳定性。 **一、Log4j核心组件** 1. **Logger**: 日志记录器,它是Log4j的...

    log4j jarjar包

    Log4j,作为Java领域中最流行和广泛使用的日志框架之一,因其强大的功能和灵活性,深受开发者的喜爱。本文将深入探讨Log4j的核心概念,以及如何在项目中使用log4j-1.2.16.jar这个关键的jar包。 一、Log4j简介 Log4...

Global site tag (gtag.js) - Google Analytics