博客说明:撰写博客目的是在记录自己所学知识、在工作中使用技术遇到的技术问题、一些技术感悟,因此避免不了涉及到和其他文章有相似之处。本文从作者自己的实践中指出相关踩坑问题,着重指出学习过程中遇到的相关问题。如果存在相关侵权问题请联系博主删除,同时有技术上的见解可以在评论去里发出,会不定期回复,谢谢。

gitee地址:https://gitee.com/woniurunfast/springbootwitheverything

01目标

1、学会springboot几种日志的使用
2、了解日志的输出模式
3、自定义日志

02日志相关知识点

(1) 在springboot的底层日志结构主要依赖了三个框架分别是:

  • slf4j
  • logback
  • log4j

(2)slf4j、logback和log4j三者的关系

1、logback和log4j是日志实现框架,就是实现怎么记录日志的。

2、slf4j:提供了java所有的日志框架的简单抽象(使用了日志的门面设计模式),说白了就是一个日志API(没有实现类), 它不能单独使用,必须要结logback和log4j日志框架来实现结合使用。
3、springboot的日志搭配
springboot2.x以后默认采用了:slf4j+logback的日志搭配。
4、日志级别
顺序是:trace>debug>info>warn>error

02基本日志使用方法

(1)基本使用:

package com.hkx.demo.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/log")
public class LogController {

    /**
     * 日志使用第一种方式
     */
    private static final Logger log = LoggerFactory.getLogger(LogController.class);

    @GetMapping("/info")
    public void console(){
        log.trace("----------trace--------");
        log.debug("----------debug--------");
        log.info("----------info--------");
        log.warn("----------warn--------");
        log.error("----------error--------");
    }
}

(2) lombok优化日志的定义使用方法

package com.hkx.demo.service;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;


/**
 * lombok优化日志的定义
 * 日志使用的第二种方式
 */
@Service
@Slf4j
public class LogService {

    public void logTest() {
        try {
            System.out.println(1/0);
            log.info("hhhhh");
            log.info("kkkkk");
        } catch (Exception ex) {
            log.error("error");
        }

    }
}

(3)日志级别的控制
指定日志级别 把springboot的所有日志修改成为info
在application.yml添加

logging:
  level:
    root: info

所有日志info级别的会被打印

03日志输出文件和日志格式

1、日志输出文件:
日志输出文件:默认情况下关闭。
(1)项目发布制定日志输出的文件

nohup java -jar xxxx.jar >>log.txt &

(2)在配置文件上定义

logging:
  level:
    root: info
  file:
    # 如果不想把日志存放在logging.file.path目录下,可以采用name来重新定义存储的位置和日志文件的名称
    name: F:/woniurunfast_java/www/logs/woniu.log
  pattern:
    # file 是指日志文件中日志的格式
    file: "【KuangStudy-file】%d{yyyy/MM/dd-HH:mm:ss} -- [%thread] %-5level %logger{50} -- %M - %msg%n"

运行后生成:
Springboot联结万物学习笔记--Springboot微服务基础搭建篇(三)--  SpringBoot中日志的使用_日志输出
2、日志格式(太多内容了,大家自己探索吧)

%c 输出logger名称
%C 输出类名
%d{HH:mm:ss.SSS} 表示输出到毫秒的时间
%t 输出当前线程名称
%-5level 输出日志级别,-5表示左对齐并且固定输出5个字符,如果不足在右边补0
%logger 输出logger名称,因为Root Logger没有名称,所以没有输出
%msg 日志文本
%n 换行
其他常用的占位符有:
%F 输出所在的类文件名,如Log4j2Test.java
%L 输出行号
%M或%method 输出所在方法名
%l 输出完整的错误位置, 包括类名、方法名、文件名、行数
%p 该条日志的优先级
%replace{pattern}{regex}{substitution} 将pattern的输出结果pattern按照正则表达式regex替换成substitution

04 自定义logback.xml

引入logback.xml文件,项目启动时候会自动读取该文件日志的设置
Springboot联结万物学习笔记--Springboot微服务基础搭建篇(三)--  SpringBoot中日志的使用_git_02
配置的东西太多,具体可通过我的gitee下载下来查看