日志组件

来源:互联网 发布:滚压成型工艺软件 编辑:程序博客网 时间:2024/05/17 15:40

常用的日志组件


名称 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 jdk14simpleLog




源码:


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-impllogback-classic slf4j-jclslf4j-jdk14


log4j   log4j2 logbackjcl JUL

......


3.slf4j替换jcl集成方案


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


log4j log4j-slf4j-impl


jcl日志文件 log4j-core(log4j2)


log4j2日志文件




原创粉丝点击