Java 界里有许多实现日志功能的工具,最早得到广泛使用的是 log4j,许多应用程序的日志部分都交给了 log4j,不过作为组件开发者,他们希望自己的组件不要紧紧依赖某一个工具,毕竟在同一个时候还有很多其他很多日志工具,假如一个应用程序用到了两个组 件,恰好两个组件使用不同的日志工具,那么应用程序就会有两份日志输出了。
Logback 先找 logback-test.xml ,没有则找 logback.xml 文件,都找不到就使用 BasicConfigurator 基本配置,BasicConfigurator 就是相当于等会贴出的 logback.xml 文件内容的配置。这里我们用 logback.xml 配置文件,以前的 log4j.properties 文件可以用 PropertiesTranslator 转换成 logback.xml 文件内容。
主配置文件为logback.xml ,放在src 目录下或是WEB-INF/classes 下,logback 会自动加载
下面是一个最简单的 logback.xml 文件内容
01 02 03 04 05 06 07 08 09 10 11
|
使用 Logback 的代码
可以看到与使用 SLF4J 的代码没有任何区别,因为本来用的通用日志框架就是 SLF4J ,说到底,这里的 Logback 就相当于 SLF4J+Log4J 使用方式中的 Log4J 绑定和 Log4J 的功能。 在 log4j.xml 能做的配置, logback.xml 中也能做到,而且还增强了诸如
|
如之前有 log4j ,想用 log4j 和 logback 共存: 则需 jcl-over-slf4j-xx.jar
commons-logging (spring 和 struts2 框架要用到)
logback-classic-x.xjar
logback-core-xx.jar
slf4j-api-xx.jar
log4j-over-slf4j-xx.jar
如全新项目,则推荐只用 logback, 只需以下 jar :
logback-classic-1.0.0.jar
logback-core-1.0.0.jar
slf4j-api-1.6.4.jar
jcl-over-slf4j-1.6.4.jar
commons-logging ( spring 和 struts2 框架要用到)
如果用 slf4j+log4j 则以下 jar:
slf4j-api-1.6.4.jar
slf4j-logj12.jar ( slf4j 与 log4j 之间的绑定)
log4j.jar
SLF4J 在使用其他日志实现框架的时候都是 SLF4J+ 相应绑定+ 日志实现,这里缩写成的 SLF4J+Log4J ,中间是有一个 SLF4J 到 Log4J 的绑定的。完整表述它们就是:
SLF4J+Log4J 的方式: slf4j-api-1.5.11.jar + slf4j-log4j12-1.5.11.jar + log4j-1.2.15.jar
SLF4J+Logback 的方式:slf4j-api-1.5.11.jar + logback-classic-0.9.20.jar + logback-classic-0.9.20 前一个 logback-classic-0.9.20.jar 是作为绑定用的,后一个是作为日志实现用的,也就是 logback-classic-0.9.20.jar 把前面的 slf4j-log4j12-1.5.11.jar 和 log4j-1.2.15.jar 两个包的功能揉合在了一起。
搞明白了 Logback 在其中所担当的角色后,我们就知道,说使用了 Logback 应用组件,实际它们所用的统一日志组件只是 SLF4J 。也可以说 Logback 就是 Log4J 那样,只是自身带了绑定的日志实现。
log4j 配置文件也会自动加载 只要默认名为log4j.properties/log4j.xml 且放在src 目录下,都可以自动加载配置文件
logger.debug ("param: order. < " + getParameter(order) + " >"); 在log4j 中,先拼接字符串,再进行判断,当前的日志输出策略是否允许输出debug 信息,如允许,则输出, 不允许,则放弃 性能不太好,容易造成拼接了大量字符串,而最后放弃,严重影响程序速度。
if ( logger .isDebugEnabled()) {
logger .debug( "param: order. < " + getParameter(order) + " >" );
}
这样写,如果不允许 debug 时(级别为 info 时) ,则不进行字符串拼接。。但是,如果允许 debug ,则会判断两次,一次在 logger .isDebugEnabled() ,一次在 logger .debug ,这样也会影响性能。
在 logback 中
logger .debug( "hello,{}" , "slf4j_debug" );
logger .info( "hello,{}" , "slf4j_info" );
则将字符串拼接延后,先判断 debug 是否可用,再进行拼接,提高了效率和运行速度。
Logback 加载配置文件顺序及截图:
关于个别包的日志级别的调整(个性化)如图:默认的包会启用 INFO 级别,设置后, com.logback.error 包的日志级别为 error ,其中 info 、 debug 级别日志不打印。 com.logback.debug 包的日志级别为 debug ,其中 debug 及其以上级别会打出,而默认只会打出 INFO 级别信息, 此可以追踪异常,而只需调整一部分日志级别,不影响整体。