`

log - 日志执行前先判断日志级别

 
阅读更多

错误案例

现象描述:发现某些服务器的pv数不高,但服务器的load却不低,高于平均水平

错误分析

分析过程:

通过内存监控发现,GC的动作比较频繁,但无法找到原因,一次PLA偶然的发现了大量如log.debug(“memberId:” + member.getMemberId())代码


原因分析:

在代码中发现如下代码段很多:

log.debug(“memberId:” + member.getMemberId())

以上代码执行时,分两步:

1. 先执行的是括号中的字符串相”+”的动作,而每次”+”运算都会导致新字符串的生成,这样就产生了很多“中间字符串”,在极大次数被调用时,这种字符串被创建和销毁的数量非常庞大,从而造成了jvm gc频繁执行,进而影响了性能。

2. 再执行log.debug()函数,在生产环境log level一般大于info,所以实际不会打印debug信息综上所述,这些代码在生产环境不会产生日志,但会执行字符串”+”运算,而这些运算是无意义的,所以需要先判断日志的优先级,方式是log.isXXXEnabled() { log.XXX(……); }

Log Level的级别: Fatal->error->warn->info->debug,级别从高到低

一般我们生成环境的log level都是error,所以对于Error以上级别的日志,不用判断;对于error以下级别的都要加上判断。

正确用法

正确用法:

//加上是否enable的判断,屏蔽log.debug的执行
if(log.isDebugEnable()){
    log.debug(“memberId:”+member.getMemberId());
}

来自:http://blog.csdn.net/rubenyu/article/details/6591741

 

分享到:
评论

相关推荐

    日志规范和级别

    输出日志之前最好能判断日志的级别。 3. 占用磁盘空间:通常,我们都是把日志写入磁盘上的日志文件中。适当的使用滚动日志并且定时清除旧文件是有好处的。 4. 日志的时效性:有的时候我们并不能及时的发现问题。...

    log4j-1.2.14.jar和配置文件

    - **Logger类**:作为核心的日志记录接口,它的实现涉及到日志级别判断、日志事件的触发及Appender的选择。 - **Appender接口**:定义了日志输出的基本操作,如`append()`方法,实现类如ConsoleAppender、...

    前端开源库-lws-log

    1. **多级别的日志记录**:`lws-log` 支持多个日志级别,如 `error`、`warn`、`info`、`debug` 等,开发者可以根据需要选择不同级别的日志输出,便于在生产环境和开发环境中灵活调整。 2. **颜色高亮**:在支持的...

    Log4j使用手册 日志记录包

    - **使用条件判断**: 可以使用if语句判断当前日志级别是否启用来决定是否执行日志记录操作。 **3. 日志信息的输出时的优化** - **合理选择Appender**: 选择合适的Appender可以提高日志记录的效率。例如,使用文件...

    apache-log4j-1.2.15.tar.gz

    如果日志级别高于当前配置的级别,那么对应的日志语句将不会执行,节省了计算资源。 9. **可扩展性**:Log4j的API设计允许开发者添加自定义Appenders、Layouts和Filters,以满足特定需求。 10. **安全性**:Log4j ...

    apache-log4j-2.12.0-jar.zip

    6. **Configuration**:Log4j使用XML、JSON或YAML等格式的配置文件来设置日志级别、Appender、Layout和Filter。这使得配置易于理解和管理。 在Log4j 2.12.0版本中,引入了一些新特性和改进,如性能优化、API增强...

    log4j的所有jar包

    1. **日志级别**:Log4j允许设置不同的日志级别,如DEBUG、INFO、WARN、ERROR和FATAL,这些级别决定了哪些日志信息会被记录。 2. **配置文件**:Log4j使用XML、JSON或纯文本格式的配置文件来定义日志输出的行为,...

    日志dll(读取配置文件判断是否写日志)

    1. 配置文件允许在不重新编译程序的情况下更改日志设置,例如在生产环境中,我们可能希望降低日志级别以减少磁盘空间占用;而在调试阶段,我们可能需要更详细的日志信息来定位问题。 2. 通过配置文件,我们可以灵活...

    C语言程序日志打印和日志文件

    1. **日志级别**:为了方便管理和筛选,日志通常被分为多个级别,如DEBUG、INFO、WARNING、ERROR和FATAL。程序员可以根据需要选择打印不同级别的日志信息。 2. **日志格式**:日志信息应包含时间戳、日志级别、模块...

    log4cxx Windows版

    6. **性能优化**:Log4cxx在设计时考虑了性能,如对日志输出的条件判断,避免在不必要时执行昂贵的I/O操作。 7. **嵌入式使用**:由于已经编译为DLL,开发者可以直接在Windows项目中引用,减少了额外的编译步骤。 ...

    log4j入门详解

    在调用`logger.debug`、`logger.info`等方法前,可以先通过`logger.isDebugEnabled()`、`logger.isInfoEnabled()`等方法来检查当前的日志级别是否允许输出该级别的日志。这样做的好处是可以避免在非debug级别环境下...

    log4j配置详解 新手入门教程

    - `log4j.logger.org.apache.struts=WARN`: 设置`org.apache.struts`包下的所有类的日志级别为WARN。 ##### 3. Root Logger(根日志记录器) Root Logger是所有Logger的父Logger,如果没有指定其他Logger,则所有...

    SQL日志清理源码 用于SQL数据库的日志清理

    - **交易日志(Transaction Log)**:在SQL Server中,交易日志记录所有对数据库的更改操作,确保数据一致性并支持回滚和快照隔离级别。 - **审计日志(Audit Log)**:记录用户活动和安全事件,用于合规性和安全...

    de.jayefem.log4e_free_1.3.3

    1. **配置**:Log4e的配置文件(通常为log4e.properties或log4e.xml)用于定义日志记录的行为,包括日志级别(DEBUG、INFO、WARN、ERROR、FATAL)、输出目的地(控制台、文件、网络等)和布局模板。 2. **日志级别*...

    log4j入门、详解

    为了提高性能,Log4j提供了日志输出的条件判断,只有当日志级别高于或等于当前设置的级别时,才会执行日志输出操作。此外,还可以通过异步日志记录和使用更高效的布局策略来进一步提升性能。 总结来说,Log4j是一个...

    log4j入门、详解.pdf

    1. **日志输入级别的判断**:在调用logger的方法前,应先判断当前的日志级别是否会被输出。例如,如果当前设置的日志级别为`INFO`,那么`debug`级别的日志将不会被输出。为了避免不必要的计算,应该使用`logger....

    【MyBatis入门】—— MyBatis日志

    2. **配置日志级别**:根据需求,设置日志级别,例如在log4j.properties中写入`log4j.rootLogger=DEBUG, stdout`,这会将所有级别的日志输出到控制台。 3. **配置输出目标**:除了控制台,日志还可以输出到文件、...

    关于log4j的资料关于log4j的资料

    - **日志级别选择**: 根据需求调整日志级别,生产环境中通常只保留ERROR和WARN级别,开发阶段可启用DEBUG或TRACE级别。 - **日志切割**: 使用RollingFileAppender实现日志文件的大小限制和日期切割,避免单个日志...

    安卓log工具的使用

    掌握其使用技巧,包括理解不同日志级别,灵活运用`Log`类,有效利用Logcat和adb命令,以及在不同环境下适当地管理日志,将使你在Android开发过程中更加得心应手。通过不断学习和实践,你将能够更好地应对各种开发...

    log4j

    对于源码级别的学习,你可以通过阅读log4j-1.2.15.jar中的源代码来深入了解其实现原理,如日志事件的处理流程、不同日志级别的判断机制以及日志输出的实现细节等。 总结,log4j作为一个强大的日志框架,对于Java...

Global site tag (gtag.js) - Google Analytics