转载https://blog.csdn.net/rubenyu/article/details/6591741
代码中日志必须先判断级别
错误案例
现象描述:发现某些服务器的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());
}
分享到:
相关推荐
精简版的`log4j.properties`仅包含必要的配置,适用于简单场景。比如: - 只有一个输出到控制台的Appender,没有日志文件。 - 全局日志级别设置为INFO或ERROR,不记录DEBUG级别的日志。 - 日志格式简化,只包含日期...
创建自定义的`DebugLog`工具,不仅可以提高调试的便利性,还可以根据项目需求定制更丰富的日志功能。通过扩展到`Object`类,我们可以在所有游戏对象和组件上直接使用`this.Log()`,使代码更加简洁易读。在实际开发中...
虽然不推荐,但在过渡期间可能有必要这样做,以确保与旧代码库的兼容性。新的mongodb扩展设计时考虑到了向后兼容,但仍然建议逐步迁移旧代码以使用新扩展,因为旧的mongo扩展已被弃用,并且不再接受新的功能更新或...
Log4j,作为Apache软件基金会的一个开源项目,是Java世界中最受欢迎的日志框架之一,其1.2.17版本因其稳定性和广泛兼容性而被广泛应用。本文将围绕“log4j-1.2.17.jar”这一核心组件,深入探讨其功能、配置以及在...
Log4j是Apache组织开发的一款强大的Java日志记录框架,被广泛应用于各种Java项目中,以提供灵活的...通过理解和熟练掌握`log4j.properties`配置,你可以优化日志记录,提高开发效率,同时保持系统的可维护性和稳定性。
在Java开发中,日志记录是一项至关...总的来说,Log4j2的配置灵活性很高,可以根据项目需求调整输出级别、格式、存储路径等。通过上述配置,我们实现了根据日志级别区分存储的目标,从而更好地管理项目中的日志信息。
由于其易用性和灵活性,Log4j 成为了 Java 开发者们非常熟悉的日志工具之一。它允许开发者将应用中不同级别的日志信息输出到不同的目的地,如控制台、文件或网络服务器等。 #### 二、Log4j的基本思想与使用 Log4j ...
1.2.17是Log4j的一个稳定版本,虽然后续有更先进的2.x版本,但1.2系列因其广泛的兼容性和稳定性,仍在很多项目中被广泛使用。 2. **主要组件** - **Logger(日志器)**:它是日志系统的主要接口,用于生成日志信息...
3. **设置日志级别**:spdlog支持多种日志级别,如trace、debug、info、warn、err、critical和off。你可以根据需要调整日志级别,控制输出的信息量。 ```cpp console_logger->set_level(spdlog::level::debug); `...
这不仅能够提升代码的可维护性,也是软件开发过程中的必要技能。对于初学者来说,这是一个很好的实践项目,可以帮助他们深入理解C语言的底层工作原理。而对于经验丰富的开发者,自定义日志系统可以满足特定项目的...
log.debug("This is a debug message."); log.error("This is an error message."); log.warn("This is a warning message."); log.fatal("This is a fatal message."); ``` #### 总结 在Java开发中选择合适...
首先,log4cxx的核心在于其灵活性和可配置性。它允许用户通过配置文件(如`log4cxx.properties`或`log4cxx.xml`)来定制日志级别、输出目的地、格式等,使得日志管理更加有序。在VS2015中,我们需要先下载并安装log4...
因此,合理配置日志级别和使用条件语句(例如,只在调试时启用DEBUG日志)是必要的性能优化策略。 总之,Log4j作为一个强大而灵活的日志框架,为Java开发者提供了丰富的功能,便于他们在开发和维护过程中进行问题...
首先,需要在项目中导入`log`包和其他必要的包,例如`os`用于文件操作。 ```go import ( "log" "os" ) ``` #### 2. 创建日志实例 使用`log.New()`函数创建一个新的日志对象,并设置输出目的地、前缀和标志位。 ...
Log4cpp 是基于 Apache 的 Log4j 模型设计的,它提供了一个灵活的日志框架,允许程序员定义不同级别的日志输出,如 DEBUG、INFO、WARN、ERROR 和 FATAL。此外,Log4cpp 还支持多种日志输出目标,如控制台、文件、...
这个"apache-log4j-2.17.0-bin.tar.gz"文件是一个压缩包,其中包含了Log4j 2.17.0版本的二进制文件,通常包括可执行的JAR文件和其他必要的资源。此版本的发布主要是为了修复安全漏洞,提供最新的功能以及改进性能。 ...
log4j.rootLogger=DEBUG, Console log4j.appender.Console=org.apache.log4j.ConsoleAppender log4j.appender.Console.Target=System.out log4j.appender.Console.layout=org.apache.log4j.PatternLayout log4j....
log4net.dll是该框架的核心组件,包含了所有必要的API和实现,可以方便地集成到.NET项目中。 二、核心概念 1. Appender:Appender是log4net的核心组成部分,负责将日志消息写入目标介质,如控制台、文件、数据库、...
2. **Log4j 1.2**:Log4j是Apache的一个开源项目,它提供了丰富的日志功能,包括日志级别(DEBUG, INFO, WARN, ERROR, FATAL, ALL),输出格式,日志Appender(控制日志输出到哪里,如控制台、文件、邮件等),以及...
总结起来,`Log4j`的灵活性和强大功能使得开发者能够有效地管理和组织不同包的日志,提高故障排查效率,同时也便于对系统的运行状态进行监控。通过深入理解Log4j的配置机制,我们可以定制符合项目需求的日志策略,为...