1、概述

市场上有非常多的日志框架,比如:JUL(java.util.logging)、JCL(Apache Commons-Logging)、Log4j、Log4j2、Logback、SLF4j、jboss-logging等等。SpringBoot在框架内部使用的是JCL,spring-boot-starter-logging采用了slf4j+logback的形式,同时SpringBoot也能自动适配(JUL、log4j2、lobback)并简化配置。

  • 日志门面(日志的一个抽象层)
  • JCL(Apache Commons-Logging)
  • SLF4j
  • jboss-logging
  • 日志实现
  • Log4j
  • JUL(java.util.logging)
  • Log4j2
  • Logback

2、SLF4j使用

2.1 如何在系统中使用SLF4j

官方的用户手册地址:http://www.slf4j.org/manual.html

import org.slf4j.Logger;import org.slf4j.LoggerFactory;public class HelloWorld { public static void main(String[] args) { Logger logger = LoggerFactory.getLogger(HelloWorld.class); logger.info("Hello World"); }}

首先,项目中需要引入slf4j的jar和logback的实现jar,调用日志记录方法时,不直接调用日志的实现类而是调用日志的抽象层方法。slf4j具体的使用可以参考下图:





2.2 使用统一的日志框架

让系统中所有的日志都统一到slf4j:

  • 将系统的其他日志框架先排除掉
  • 用中间包来替换原有的日志框架
  • 导入slf4j其他的实现



3、SpringBoot的日志关系

3.1 创建项目

新建一个项目springboot-logging,其中pom.xml的依赖:

org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-test test

3.2 查看日志依赖关系

SpringBoot使用的日志功能:

org.springframework.boot spring-boot-starter-logging 2.1.9.RELEASEcompile

在IDEA中打开pom.xml文件,查看依赖关系,如下图所示:



  • SpringBoot底层的日志也是使用slf4j+logback的方式进行日志记录
  • SpringBoot把其他的日志都替换成slf4j

3.3 日志的使用

1、SpringBoot默认的日志级别是info,在测试类中添加以下代码并运行。

@RunWith(SpringRunner.class)@SpringBootTestpublic class SpringbootLoggingApplicationTests { Logger logger = LoggerFactory.getLogger(getClass()); @Test public void contextLoads() { // 日志级别,由低到高,trace < debug < info < warn < error logger.trace("这是Trace日志..."); logger.debug("这是debug日志..."); logger.info("这是info日志..."); logger.warn("这是warn日志..."); logger.error("设施error日志..."); }}

运行结果:



2、修改日志级别在application.yml配置文件中增加以下配置:

logging: level: com: xiaoh: springboot: logging: trace

在运行单元测试,结果如下:



3、日志的其他配置

logging: level: com: xiaoh: springboot: logging: trace # 不指定路径时,在当前项目下生成springboot.log日志 # 也可以指定完整的路径 #file: springboot.log # 指定目录,日志文件使用默认的spring.log path: /spring/log pattern: # 在控制台输出的日志格式 console: %d{yyyy-MM-dd HH:mm:ss.SSS} {%thread} %-5level %logger{50} - %msg%n # 在文件中的日志格式 file: %d{yyyy-MM-dd HH:mm:ss.SSS} {%thread} %-5level %logger{50} - %msg%n

日志输出格式:

  • %d:表示日期时间
  • %thread:表示线程名
  • %-5level:表示级别从左显示5个字符宽度
  • %logger{50}:表示logger名字最长50个字符,否则按照句点分隔
  • %msg:日志消息
  • %n:换行符
4、如何自定义配置文件参考官方文档:https://docs.spring.io/spring-boot/docs/2.1.9.RELEASE/reference/html/boot-features-logging.html#boot-features-custom-log-configuration ![file](https://graph.baidu.com/resource/2124bb45851d9a45d422a01572082405.png) 在resources目录下新建一个配置文件logback-spring.xml:```<?xml version="1.0" encoding="UTF-8"?>[ %-5level] [%date{yyyy-MM-dd HH:mm:ss}] %logger{96} [%line] - %msg%nUTF-8${LOG_HOME}/logs/APP-%d{yyyy-MM-dd}.%i.log3064MB [ %-5level] [%date{yyyy-MM-dd HH:mm:ss}] %logger{96} [%line] - %msg%n UTF-8

`

4、源码

GitHub:https://github.com/chenjiecg/SpringBoot.git