用slf4j+logback替代commons-logging+log4j
- 加载如下jar包:
slf4j-api.jar
logback-core.jar
logback-classic.jar
log4j-over-slf4j.jar
jcl104-over-slf4j.jar
- 同时删除commons-logging.jar和log4j.jar
- 到http://logback.qos.ch/translator/Welcome.do转换log4j.properties为logback.xml
体会
在目前大量开源框架使用commons-logging和log4j的状况下,单纯切换到
slf4j没有什么必要,除了多了些日志接口,加强了参数设置,没有本质上的改进;而
slf4j+
logback的联合方式仍是有前景的,同原先的log4j相比
logback有如下改进:
- 支持按文件大小或基于时间的切分方式,可自定义命名模式
- 支持文件打包(触发器方式)
- 支持OSGI环境
FAQ
问题1:org.slf4j.impl.StaticLoggerBinder.SINGLETON
产生缘由:
slf4j-1.5.5+
logback-0.9.13使用时会报该错误
解决:升级
slf4j到1.5.6
问题2:Failed to load class org.slf4j.impl.StaticLogger
产生缘由:
slf4j未找到具体的日志实现
解决:选择一种日志实现放入类路径中,可选实现有:
slf4j-nop.jar ,
slf4j-simple.jar ,
slf4j-log4j12.jar ,
slf4j-jdk14.jar or
logback-classic.jar
问题3:java.lang.NoClassDefFoundError: org/codehaus/janino/ExpressionEvaluator
产生缘由:未加载janino.jar。
说明:在使用ch.qos.
logback.classic.net.SMTPAppender的时候发生。
Janino是一种内嵌的开源Java编译器。Janino并非一种提供给开发人员编译程序的编译器,而是Java程序在运行时编译Java代码的编译器。Janino经过动态编译代码,从而提升了程序的性能。
解决:将janino.jar加入类路径