欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java中的日志分类及应用

程序员文章站 2024-01-20 19:02:52
...

java中常用的日志分类有以下几种

1. JUL  (java.util.Logging) Java自带的日志,可以直接使用

package site.uuyy.log;

import java.util.logging.Logger;

public class JUL {

    public static void main(String[] args) {
        Logger log = Logger.getLogger("jul");
        log.info("123");
    }
}

2. log4j 

maven 项目导入,无其他依赖

<dependency>

   <groupId>log4j</groupId>

   <artifactId>log4j</artifactId>

   <version>1.2.12</version>

</dependency>
package site.uuyy.log;


import org.apache.log4j.Logger;

public class Log4j {
    public static void main(String[] args) {
        Logger logger=Logger.getLogger(Log4j.class);
        logger.info("log4j1");
    }
}

需要添加配置文件log4j.properties 放置在classpath下面:

log4j.rootLogger=debug,stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c:%L - %m%n

3. JCL :Jakarta commons-logging ,是apache公司开发的一个抽象日志通用框架,本身不实现日志记录,但是提供了记录日志的抽象方法即接口(info,debug,error.......),底层通过一个数组存放具体的日志框架的类名,从而判断使用哪种前两种那种方式来实现,已停止更新

jcl 不直接记录日志,通过第三方记录日志

      如果使用jcl来记录日志,在没有log4j的依赖情况下,是用jul

      如果有了log4j则使用log4j

添加依赖:

<dependency>
    <groupId>commons-logging</groupId>
    <artifactId>commons-logging</artifactId>
    <version>1.2</version>
</dependency>

编写测试类:

package site.uuyy.log;

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

public class JCL {
    public static void main(String[] args) {
        Log log=LogFactory.getFactory().getInstance(JCL.class);
        log.info("jcl");
    }
}

4.  slf4j: Simple Log Faceded for Java  也不记录日志, 通过绑定器绑定一个具体的日志记录来完成日志记录

添加依赖:

<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>slf4j-api</artifactId>
   <version>1.7.25</version> 
</dependency>
 <!-- 下面的为绑定器-->
 <!--<dependency>-->
     <!--<groupId>org.slf4j</groupId>-->
     <!--<artifactId>slf4j-jdk14</artifactId>-->
     <!--<version>1.7.25</version>--><!--版本要和slf4j的版本一致-->
 <!--</dependency>-->
 <!--<dependency>-->
     <!--<groupId>org.slf4j</groupId>-->
     <!--<artifactId>slf4j-log4j12</artifactId>-->
     <!--<version>1.7.25</version>--><!--版本要和slf4j的版本一致-->
 <!--</dependency>-->
 <dependency>
     <groupId>ch.qos.logback</groupId>
     <artifactId>logback-classic</artifactId>
     <version>1.2.3</version>
 </dependency>

编写测试类:

package site.uuyy.log;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class SLF4j {
    public static void main(String[] args) {
        Logger logger=LoggerFactory.getLogger(SLF4j.class);
        logger.info("slf4j");
    }
}

在slf4j中还有桥接器的概念,具体参考 http://www.slf4j.org/legacy.html,以**释为个人理解

<!--这个叫桥接器,社么意思呢,就是我本身类是log4j来实现日志的,现在我要交给slf4j去实现,
而假设slf4j现在绑定的是logback实现方式,所以最终日志会以logback方式打印而不是以log4j来实现,其他桥接器同理-->
<dependency>
   <groupId>org.slf4j</groupId>
   <artifactId>log4j-over-slf4j</artifactId>
   <version>1.7.25</version>
</dependency>

5. 其他 logback,simple-log,log4j2 等等

6. 图像描述

7. Spring中的日志

8.  项目结构 及github地址

Java中的日志分类及应用