Logback介绍
Logback是由log4j创始人设计的一个开源日志组件,是Spring Boot默认使用的日志系统。Logback被分为3个组件:logback-core|logback-classic|logback-access。
logback-core:提供了Logback的核心功能,是另外两个组件的基础
logback-classic:可以看作是log4j的优化版本,同时实现了slf4j的API(配合slf4j使用时,需引入该组件)
logback-access:与Servlet容器进行整合,提供了http访问日志的功能
- Logback官方网站:http://logback.qos.ch/
- Logback中文手册:http://www.logback.cn/
Spring Boot项目中的配置
默认配置
Spring Boot默认使用Logback日志系统,并将日志打印到控制台上。使用Logback,理论上是需要添加对应的dependency依赖的:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
实际新建Spring Boot项目时一般都会引用spring-boot-starter或者spring-boot-starter-web,而这两个依赖中都已经包含了对于spring-boot-starter-logging的依赖,所以无需额外添加依赖,也是我们新建项目后明明没有配置过日志,却可以在启动项目时在控制台看到日志的原因。
本地日志配置
开发过程中,我们习惯直接在控制台查看日志,而到项目打包上线后,日志信息还是应该保存在日志文件中,便于随时查看处理问题。在Spring Boot项目中会有application.properties文件或者application.yml文件,我们可以在其中添加如下配置:
#配置日志
logging:
file:
#配置日志文件路径
path: ../log
#配置日志文件名称
name: application.log
level:
#不同目录下的日志可配置不同级别
root: info
com.demo.api.dao: debug
pattern:
#控制台日志输出格式
console: '%d{yyyy/MM/dd HH:mm:ss} %-5level --- [%logger] : %msg %n'
#日志文件输出格式
file: '%d{yyyy/MM/dd HH:mm:ss} %-5level --- [%logger] : %msg %n'
日志输出格式说明:
%d{yyyy/MM/dd-HH:mm:ss}:日志输出时间
[%thread]:日志输出进程
%-5level:日志级别,使用5个字符靠左对齐
%logger:日志产生的类
%msg:日志信息
%n:换行符
日志的使用
在使用日志系统的类中声明日志对象,并通过调用info()、error()等方法在控制台输出对应等级的日志。
package com.demo.api.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
/**
* IndexController
*
* @author: Rex.Wang
* @date: 2020-01-02
*/
@CrossOrigin
@RestController
@RequestMapping(value = "/index")
public class IndexController {
private static final Logger logger = LoggerFactory.getLogger(IndexController.class);
@PostMapping(value = "/list")
public Map selectDataList(Integer id) {
Map map = new HashMap(1);
try {
logger.info("info");
logger.debug("debug");
logger.error("error");
map.put("data", id);
} catch (Exception ex) {
map.put("data",ex);
}
return map;
}
}
Spring Boot默认的日志级别为INFO,根据日志级别间的递进关系:TARCE < DEBUG < INFO < WARN < ERROR < FATAL,TARCE和DEBUG级别的日志都看不到。
在声明日志对象时,很多开发人员会觉得方法LoggerFactory.getLogger(String name)中的参数可有可无,随便写个类或者直接写空字符串也不会影响日志的输出,但实际上还是建议开发人员在调用这个方法时准确编写class信息,这样能够快速定位日志产生的对应类,提高解决问题的效率。