1、日志组件选择与性能优化 2013年7月2日志框架的关注点:1.易用性2.性能好3.存储方便4.灵活的日志格式化5.是否支持日志等级6.是否能应用在多线程环境7.成熟度Log4J 具备以上条件。31.易用性易用性 依赖简单,只需要log4j-1.2.16.jar一个依赖文件 使用简单,使用前要先定义,定义完后便可直接使用42.性能好性能好 Log4J在性能上做了最大的优化,记录一条简单格式日志只需要17 微秒(System.out也要16微秒),测试代码如下:53.存储方便存储方便 可以在配置文件配置存储端,支持多种存储端,如console,files,database,GUI componen
2、ts,remote socket servers,JMS,NT Event Loggers,and remote UNIX Syslog daemons,并且一次可以输出到多个不同的存储端。63.存储方便(续)存储方便(续)也可把两个配置合并,同时输出到控制台和文件,如果需要配置其它端,可参考74.灵活的日志格式化灵活的日志格式化 可以在配置文件配置日志的格式与输出信息 简单配置:log4j.appender.stdout.layout.ConversionPattern=%p-%m%n 日志输出信息:INFO-What a beatiful day.复杂配置:log4j.appender.s
3、tdout.layout.ConversionPattern=%-dyyyy-MM-dd HH:mm:ss%t:%r -%p%c1%m%n 日志输出信息:2013-07-23 11:23:12 main:0 -INFO Hello What a beatiful day.85.成熟度成熟度 从1999年10月开始至今已经有14年的时间,并且已经在许多项目中有着成熟的应用,如Spring,hibernate等96.在多线程环境中应用是否安全在多线程环境中应用是否安全 Log4J是线程安全的,可以用在多线程环境中。性能测试:测试100个线程每秒产生100条日志,同时向一个logger写入一个文件,
4、平均157微秒每条。测试源码:MutilThreadUseTime.java107.支持不同的日志等级支持不同的日志等级 Log4J有6种不同的日志等级 TRACE,DEBUG,INFO,WARN,ERROR,FATAL FATAL为严重错误,如系统异常退出 ERROR 为程序错误,如没处理或考虑到的异常 WARN 为一般警告,如某配置文件没读取到,但不影响系统 INFO 为一般信息,如业务日志,经常被问到的一些问题 DEBUG 为程序的调试信息 TRACE 为程序的跟踪信息,如程序执行到哪一步了 根据日志的目的去使用不同等级11使用上要注意的一些问题使用上要注意的一些问题 如何区别业务日志与
5、系统日志?业务日志与系统日志,系统日志使用默认输出,业务日志在日志前增加前缀business 日志存储和性能问题 Log4J 的JDBC没有使用线程池,因此在大并发的环境下会有问题,如果需要把日志记录到数据库,尽量使用消息队列进行转换 12使用上要注意的一些问题使用上要注意的一些问题 通过设置输出不同的日志等级提高性能 对于长连接字符串要增加开关,避免不必要的性能开销(因为字符串组装影响性能)13加强的日志框架加强的日志框架log4j 2log4J vs log4J 21.API隔离隔离Log4j 2.0学习了学习了SLF4J和和LogBack的优点,把的优点,把API及其实现类进行了分及其实
6、现类进行了分离。离。2.性能改进性能改进官方称在很多情况下,性能比官方称在很多情况下,性能比Logback更强(更强(Logback是是Log4J原作者原作者重新实现的一个高性能日志框架)。重新实现的一个高性能日志框架)。3.支持多种支持多种APIApache Log4j 2.0提供了对提供了对SLF4J和和Apache Commons Logging API的支持。的支持。4.自动重载配置自动重载配置这一点与这一点与Logback相同,相同,Log4j 2.0在日志配置文件修改了后,可以自在日志配置文件修改了后,可以自动进行重载,让配置生效。动进行重载,让配置生效。等等等等log4j 2是否兼容是否兼容Log4J,2目前并不兼容目前并不兼容1新项目建议使用新项目建议使用log4J 2来提高性能来提高性能14QA?