有时很多东西都是细致方面的事,又可能脱离互联网太长时间了,碰到这个问题居然一时反应不过来了,其实在生产系统把log4j的级别跳到debug或者info其实可想而知,不断地写日志文件,对系统本来就是一种消耗,少日志,少人用没有关系,一旦并发,数据上来之后,这个消耗是灾难性的。
应用逻辑里面打的日志量不会太多,更多情况下可能是对sql的日志和spring等等的通用插件的日志没有做好控制而导致你的日志文件在不断地刷屏。
针对此,网上的一些资料也验证了这个见解,归纳如下:
对于log4j的性能,我没有做细致的度量。抛开log4j来说,日志操作主要性能耗在输出上,所以输出的日志内容越少越好。除此之外,log4j使用上有两点需要注意:
1、在生产环境中,我们通常是关掉debug级别的,但如果程序中debug函数很多,还是会带来性能问题。因为debug函数输出的就是些调试信息,所以其参数通常是多个字符串+操作构成,这种经典的构造多个临时对象的做法显然会有些性能消耗;更有甚者会调用诸如object.toString方法,而这个被覆盖的方法很可能是将对象内的诸多属性拼凑成字符串输出,对性能有高要求的场景就很不合适。在一些基础库或框架中,就可能会看到下面的代码片断来避免性能问题,其中的isDebugEnabled只是个判定操作,在logger层次不复杂的情况下,没有什么性能损失:
if(logger.isDebugEnabled() {
logger.debug(......);
}2、复杂的logger层级也会带来性能问题。好的方面是,通常我们指定root logger就够了。
而当你的日志足够地专业,一些日志不可不打的时候,世间上的大牛已为大家准备了更好的解决方案,可参考这位领导的:
http://raymondhekk.iteye.com/blog/229937
分享到:
相关推荐
使用日志框架如Log4j或SLF4J更合适,它们可以提供更灵活的控制和性能优化。 7. **良好的命名规范**:变量、方法和类的命名应清晰、准确,反映它们的用途。使用有意义的命名可以增强代码的自我解释性,减少对注释的...
考虑使用正式的日志记录工具,如Log4j,以便更好地控制和记录信息。同时,频繁的字符串连接操作也会影响性能,可以考虑使用StringBuilder或StringBuffer类进行优化。 除了以上几点,还有其他重要的准则,如编写单元...
- **关于log4j文件**:合理配置日志级别,避免不必要的日志记录,提高应用性能。 - **去掉所有的system.out.println、e.printStackTrace()等语句**:使用正式的日志框架,如log4j,避免使用`System.out.println`和`e...
4. **静态变量慎用**:避免过度依赖静态变量实现界面间通信,以防状态混乱。 5. **日志记录**:统一日志格式,如`Log(系统名称模块名称接口名称,详细描述)`,便于追踪调试。 6. **单元测试**:涵盖逻辑与界面测试...
解决方法:打开机箱,把主板上的一节纽扣电池取出,换上一节新的既可,或是CMOS被放电了,从新进入CMOS设置时间保存并退出就可解决此问题。 Press F1 tocontinue ,DEL to enter SETUP 按F1可以继续启动,按DEL进入...
除非您访问驱动器有问题,否则不要继续进行。向系统分区写入新的主引导记录可能破坏分区表并导致分区无法访问。 format 将指定的驱动器格式化为指定的文件系统。含有下列参数的 format 命令仅在使用故障恢复...