[Spring Boot]Logback日志的配置及应用

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访问日志的功能​

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信息,这样能够快速定位日志产生的对应类,提高解决问题的效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章