基于SLF4J的日志系统需要考虑的细节

本人是根据webx和实际使用过程中的经验总结的

java的日志系统

Java的日志系统有Log4j、JUL(java.util.logging.*)、logback。项目中依赖的不同第三方包会依赖这些不同的日志系统,为了解决这些日志系统带来的混乱,出现了日志框架,这些日志框架不提供日志记录功能,只为使用者提供日志调用接口,这些接口的实现依赖于日志系统。常用的日志框架为JCL(Jakarta Commons Logging):很多应用都依赖于JCL、SFL4J:支持log4j和logback。

Logback是log4j增强版,logback和log4j的作者是同一个人(为啥不是log4j2.x,而是分裂log4j呢?),logback不能单独使用,必须配合slf4j使用。这里是作者推荐Logback 替代 Log4J 的理由:Reasonsto prefer logback over log4j,简要的说就是:更快的实现;测试强度更严格、范围更广;原生支持SLF4J;丰富的文档;基于XML/Groovy的配置、配置文件支持条件表达式、根据条件自动切分日志;自动重加载配置文件; I/O 错误时不影响Log系统;自动压缩、删除日志文件;多个 JVM 写一个日志文件;强大的日志过滤;异常栈中更多的数据信息。

 

根据我实际使用SLF4J的情况发现,因为slf4j提供的api实现在不同的日志系统和日志框架环境下,需要考虑互斥情况:(图片来源于webx)

 

slf4j+logback的日志方案

Logback 加载配置文件顺序:logback.groovy>> logback-test.xml >> logback.xml,都找不到就使用BasicConfigurator 基本配置。以前的 log4j.properties  文件可以用 PropertiesTranslator转换成 logback.xml 文件内容。在 log4j.xml 能做的配置,logback.xml 中也能做到,而且还增强了诸如 <if><then><else>、<filter>、<sift>等更强的控制,请参考 logback 的手册http://logback.qos.ch/manual/index.html

这是webx框架中关于slf4j对应不同日志系统的详细配置:http://openwebx.org/docs/logging.html

 

SLF4J+Logback 和 SLF4J+Log4J 两种方式作下比较:

SLF4J+Logback 组合

对比

SLF4J+Log4J 组合

slf4j-api-1.7.6.jar

定义高层 API

slf4j-api-1.7.6.jar

logback-classic-1.1.2.jar

日志系统和slf4j绑定

slf4j-log4j12-1.7.6.jar

logback-classic-1.1.2.jar

日志系统的具体实现

log4j-1.2.15.jar

logback.groovy/

logback-test.xml/logback.xml

日志的配置文件

log4j.properties/log4j.xml

程序代码中:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; 

Logger logger = LoggerFactory.getLogger(TestSlf4j.class);
logger.info("Hello {}","SLF4J");

使用方式完全一样,slf4j和使用者相关,不需要考虑具体的日志实现系统

程序代码中:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory; 

Logger logger = LoggerFactory.getLogger(TestLogback.class);
logger.info("Hello {}","Logback");

 

SLF4J+Logback与 SLF4J+Log4J的用法其实没有差异。但是在maven配置中要注意来自jcl的干扰。

参考:http://unmi.cc/slf4j-logback/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值