`
ixp
  • 浏览: 11967 次
  • 性别: 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日志驱动包

    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日志包

    log4j.rootLogger=debug,CONSOLE,testfile,A1,MAIL ################### # Console Appender ################### log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender log4j.appender.CONSOLE.Target=...

    spring lib j2ee

    #log4j.logger.java.sql.Connection = INFO #log4j.logger.java.sql.Statement = DEBUG #log4j.logger.java.sql.PreparedStatement = DEBUG #log4j.logger.java.sql.ResultSet = DEBUG #2 定義A1輸出到控制器 ...

    log4j-1.2.9

    static Logger log = Logger.getLogger(Main.class); public void print(){ log.debug("debug"); log.info("info"); log.warn("warn"); log.error("error"); log.fatal("fatal"); } public static ...

    Logger.getLogger()和LogFactory.getLog()的区别

    Java日志管理:Logger.getLogger()和LogFactory.getLog()的区别,详解log4j

    log4j.jar.rar

    主要是log4j的jar包,里面包含了log4j的日志文件,希望对你有帮助

    log4j配置文件

    log4j.rootLogger=info, stdout, log, errorlog log4j.Logger=search,Test ###Console ### log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target = System.out log4j....

    Log4j 学习笔记.doc

    Log4j 学习笔记. 1. Log4j的类图 2. Logger:日志写出器 1. Logger的输出方法 2. Logger的命名规则 3. Log level 4. 示例代码 5. 关于logger的两点说明 3. Appender:日志目的地 1. ConsoleAppender 2. ...

    log4j jar包

    日志类jar包 所属apache分类下 log4j-1.2.17!!! 

    Spring项目中怎么配置log4j

    NULL 博文链接:https://quicker.iteye.com/blog/676620

    Log4j-Logger详解

    Log4j-Logger详细说明以及应用

    slf4j jar包

    org.slf4j.Logger.class org.slf4j.LoggerFactory.class org.slf4j.MDC.class org.slf4j.Marker.class org.slf4j.MarkerFactory.class org.slf4j.helpers.BasicMDCAdapter.class org.slf4j.helpers.BasicMarker....

    log4j_properties配置详解

    ### set log levels ###log4j.rootLogger = debug , stdout , D , E### 输出到控制台 ###log4j.appender.stdout =org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target =System.outlog4j.appender.stdout....

    保证看完就用log4j

    log4j.logger.llg.flex=DEBUG,llg #挂到文件 #配置llg 这个日志输出到文件 log4j.appender.llg=org.apache.log4j.RollingFileAppender #文件位置 #配置llg这个日志文件的位置 log4j.appender.llg.File=f:/llg/log....

    Apache Log4j_1.2.17 完整依赖包

    Apache Log4j_1.2.17 完整依赖包,在jdk1.8.201中测试通过。使用教程https://www.tutorialspoint.com/springmvc/springmvc_log4j.htm

    Log4j日志管理系统简单使用说明

    Log4j有三个主要的组件:Loggers,Appenders和Layouts,这里可简单理解为日志类别,日志要输出的地方和日志以何种形式输出。综合使用这三个组件可以轻松的记录信息的类型和级别,并可以在运行时控制日志输出的样式和...

    log4j-1.2.14

    static Logger log = Logger.getLogger(Main.class); public void print(){ log.debug("debug"); log.info("info"); log.warn("warn"); log.error("error"); log.fatal("fatal"); } public static ...

    Logger开源log日志jar包

    Orhan Obut 大神分享的一开源项目Logger输出日志,非常好用,该开源库能够把: 线程的信息 类的信息 方法的信息 格式打印json、xml等 点击链接跳转到源码打印处 此外还可根据自己需求进行定制化,并且还可日志输出...

    log4j.jar及log4j.xml

    包内整合了log4j.jar的jar包以及log4j.xml的xml文档,解压后直接使用

    使用log4j进行日志记录

    static Logger log = Logger.getLogger(Log4jDemo.class.getClass()); /** * main * @param args */ public static void main(String[] args) { BasicConfigurator.configure();//默认配置 ...

Global site tag (gtag.js) - Google Analytics