日志组件

常用的日志组件


名称 jar 描述
-----------------------------------------------------------------------------------------
log4j log4j-1.2.17.jar 早期常用的日志组件


logback logback-core
logback-classic 一套日志组件的实现,性能优于log4j(slf4j阵营)
logback-access


log4j2 log4j
log4j-api apache开发的一款Log4j的升级产品
log4j-core


java.util.loging jdk java1.4以来的官方日志实现,无需第三方依赖
-----------------------------------------------------------------------------------------


两种日志门面,只提供接口,不提供实现:1.Apache Commons Loging   2.slf4j


1.Apache Commons Loging(JCL)
Commons Loging本身只提供日志接口,具体实现在运行时动态寻找对应组件




App


JCL


Log4j jdk14 simpleLog




源码:


org.apache.commons.logging.LogFactory
org.apache.commons.logging.LogFactoryImpl


Log log = LogFactory.getLog(TestJcl.class);
return getFactory().getInstance(clazz);


LogFactoryImpl中getInstance()方法
newInstance()方法
discoverLogImplementation()方法


1.
private static final String[] classesToDiscover = {
            LOGGING_IMPL_LOG4J_LOGGER,//org.apache.commons.logging.impl.Log4JLogger
            "org.apache.commons.logging.impl.Jdk14Logger",
            "org.apache.commons.logging.impl.Jdk13LumberjackLogger",
            "org.apache.commons.logging.impl.SimpleLog"
};
for(int i=0; i<classesToDiscover.length && result == null; ++i) {
result = createLogFromClass(classesToDiscover[i], logCategory, true);
}
classesToDiscover按顺序


2.
createLogFromClass()方法中
try {
    c = Class.forName(logAdapterClassName, true, currentCL);
} catch (ClassNotFoundException originalClassNotFoundException) {
   ......
    try {
// Try the class classloader.
// This may work in cases where the TCCL
// does not contain the code executed or JCL.
// This behaviour indicates that the application
// classloading strategy is not consistent with the
// Java 1.2 classloading guidelines but JCL can
// and so should handle this case.
c = Class.forName(logAdapterClassName);
    } catch (ClassNotFoundException secondaryClassNotFoundException) {
// no point continuing: this adapter isn't available
msg = secondaryClassNotFoundException.getMessage();
logDiagnostic("The log adapter '" + logAdapterClassName +
     "' is not available via the LogFactoryImpl class classloader: " + msg.trim());
break;
    }
}
如果classpath没加入org.apache.commons.logging.impl.Log4JLogger,
会报ClassNotFoundException,catch住,从而break,继续classesToDiscover中的下一个类


2.slf4j
  全称Simple Logging Facade For Java(java简单日志门面)


App

slf4j


slf4j-log4j12 log4j-slf4j-impl logback-classic slf4j-jcl slf4j-jdk14


log4j   log4j2 logback jcl JUL

......


3.slf4j替换jcl集成方案


spring app
jcl-over-slf4j
jcl ------------> slf4j


log4j log4j-slf4j-impl


jcl日志文件 log4j-core(log4j2)


log4j2日志文件




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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值