java日志框架(java.util.logging,commons-logging+log4j,slf4j+logback)总结

1.  java.util.logging.Logger,jdk1.4后自带日志,很少使用

2.commons-logging是apache提供的一个通用的日志接口。我们可以自由选择第三方日志组件作为实现,例如log4j,或jjava.util.logging, commons-logging会通过动态查找的机制,在程序运行时自动找出真正使用的日志库。其内部有一个Simple logger的简单实现,但是功能很弱。通常配合着log4j来使用。使用它的好处就是,代码依赖是 common-logging而非log4j, 避免了和具体的日志方案直接耦合,在有必要时,可以更改日志实现的第三方库。

3.slf4j(Simple Logging Facade for Java)java简单日志门面,有着和commons-logging一样的初衷,功能上更加强大,支持多个参数,并通过{} 占位符进行替换,避免老写logger.isXXXEnabled 这种无奈的判断,带来性能提升,OSGI 机制的更好兼容支持。

4.log4j(Log for Java),是Apache的一个开源项目,使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX Syslog守护进程等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。并且只需要一个配置文件来灵活地进行配置,而不需要修改应用的代码。

5. logback同样是由log4j的作者设计完成的,拥有更好的特性,用来取代log4j的一个日志框架,是slf4j的原生实现。

    logback 主要分为三个模块,分别是:

  logback-core:提供基础功能,是其他两个模块的基础
  logback-classic : log4j的升级,实现了self4j api
  logback-access:用于与sevlet容器进行集成、提供网络访问日志的功能

logback初始化时,默认会去classpath下依次加载如下配置文件(logback.groovy、logback-test.xml、logback.xml),当找不到配置文件时logback将为rootLogger 添加一个 ConsoleAppender ,用于将日志输出到控制台

小结:

日志门面(日志抽象层) 日志实现
JCL:Jakarta Commons Logging JUL:java.util.logging  JDK自带
SLF4j(Simple Logging Facade for Java) Log4j 、Logback

使用一:commons-logging+ log4j

pom文件引入依赖


    commons-logging
    commons-logging
    1.2


    log4j
    log4j
    1.2.17

配置文件:log4j.properties

log4j.rootLogger=debug,stdout,file_debug


log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS} [%t] [%24F:%-3L:%-5p]%x %m%n


log4j.appender.file_debug=org.apache.log4j.RollingFileAppender
log4j.appender.file_debug.File=/home/niel/tempfs/test.log
log4j.appender.file_debug.MaxFileSize=10000KB
log4j.appender.file_debug.MaxBackupIndex=10
log4j.appender.file_debug.layout=org.apache.log4j.PatternLayout
log4j.appender.file_debug.layout.ConversionPattern=%d{MM-dd HH:mm:ss.SSS} [%t] [%24F:%-3L:%-5p]%x %m%n

参数详情可参考:https://www.cnblogs.com/30go/p/7200739.html

调用方式:

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class Test {
    private static Log log = LogFactory.getLog(Test.class);
    public static void main(String[] args) {
        log.debug( "Hello World!" );
    }
}

使用二:slf4j+ logback

pom文件引入依赖


    org.slf4j
    slf4j-api
     1.7.5


    ch.qos.logback
    logback-classic
    1.0.13

 

配置文件:logback.xml



   
   
   

   
    ${CONTEXT_NAME}


   
   
       
       
           
                %d{yyyy-MM-dd HH:mm:ss.SSS}|%level|%class|%thread|%method|%line|%msg%n
           

       

   

   
       
        ${logs.dir}/logback-test.log

       
       
           
            ${logs.dir}/logback-test.%i.log
           
            1
           
            1
       

       
       
           
            30MB
       

       
       
            UTF-8
           
                %d{yyyy-MM-dd HH:mm:ss.SSS}|%level|%class|%thread|%method|%line|%msg%n
           

       

   
 

   
   
       
       
       
   

   


    

调用方式:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Test {
    public static void main(String[] args) {
        Logger logger = LoggerFactory.getLogger(Test.class);
        logger.debug("test........");
    }
}

 

注意:

如果需要使用slf4j+log4j,只需要修改pom.xml,并添加log4j.xml

 
        
            org.slf4j
            slf4j-log4j12
            1.7.25
        

当同事引用了logback包和log4j包时会有提示:绑定了多个日志实现java日志框架(java.util.logging,commons-logging+log4j,slf4j+logback)总结_第1张图片

那么这个地方就要注意了:如果有任意两个实现slf4j 的包同时出现,可能会出现问题。原因是这两个jar 包里都有各自的org.slf4j.impl.StaticLoggerBinder ,编译时候绑定的是哪个是不确定的。这个地方要特别注意!!出现过几次因为这个导致日志错乱的问题。

 

参考地址:https://www.cnblogs.com/yinz/p/5695367.html

https://www.cnblogs.com/30go/p/7200739.html

https://www.jianshu.com/p/696444e1a352

https://www.cnblogs.com/jpfss/p/9046848.html

有不对的地方,请指正

你可能感兴趣的:(日志使用)