SpringBoot学习笔记-3:第三章 Spring Boot 日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: SpringBoot学习笔记-3:第三章 Spring Boot 日志

第三章 Spring Boot 日志

1、日志框架分类和选择

日志框架:

日志门面(抽象层):
JCL Jakarta Commons Logging
SLF4j Simple Logging Facade for Java
Jboss-logging
日志实现:
JUL Java.util.logging
logback
log4j
log4j2

SpringBoot 选择:

  1. 日志门面 SLF4j
  2. 日志实现 logback

2、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");
  }

29.1.png


每一个日志的实现框架都有自己的配置文件,

使用 slf4j 以后,配置文件还是做成日志实现框架的配置文件

3、其他日志框架统一转换为 slf4j

遗留问题, 各框架使用的日志框架不一样

Spring (commons-logging)
Hibernate(jboss-logging)
MyBaits

统一日志框架

29.2.png


  1. 将系统中其他日志框架先排除
  2. 用中间包来替换原有的日志框架
  3. 引入 slf4j 其他实现

4、SpringBoot 日志关系

  1. SpringBoot 能自动适配所有日志,底层使用 slf4j+logback 方式记录日志
  2. SpringBoot 把其他日志替换成了 slf4j
  3. 中间替换包
  4. 如果引入其他框架,需要把其他框架默认的日志依赖移除

5、SpringBoot 默认配置

日志级别由低到高

trace
debug
info  默认级别
warn
error

修改日志级别

application.properties

logging.level.com.className=trace

使用示例

package com.mouday;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest
public class DemoApplicationTests {
    Logger logger = LoggerFactory.getLogger(getClass());
    @Test
    public void contextLoads() {
        logger.trace("trace");
        logger.debug("trace");
        logger.info("trace");
        logger.warn("trace");
        logger.error("trace");
    }
}

日志配置

# 指定日志文件(优先作用)
logging.file=spring.log
# 指定日志路径
logging.path=logs
# 控制台输出日志格式
logging.pattern.console=%d{yyyy-MM-dd} [%thread] %-5level %logger{50} - %msg%n
# 文件输出日志格式
logging.pattern.file=%d{yyyy-MM-dd} === [%thread] %-5level %logger{50} - %msg%n

日志格式说明

%d           日期时间
%thread      线程名
%-5level     级别从左显示5个字符宽度
%logger{50}  logger名字最长显示50个字符,否则按照句点分割
%msg         日志消息
%n           换行

6、指定日志文件和日志 Profile 功能

建立使用日志框架的配置文件,springboot 将不使用默认配置

logback                logback-spring.xml, logback.xml
Log4j2                 log4j2-spring.xml
JUL(Java Util Logging) logging.properties

说明

logback.xml 直接被日志框架识别
logback-spring.xml 日志框架不直接加载配置文件

可以使用高级功能

<springProfile name="dev">
</springProfile>

7、切换日志框架

可以按照 slf4j 日志适配图进行切换

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7月前
|
XML 安全 Java
深入实践springboot实战 蓄势待发 我不是雷锋 我是知识搬运工
springboot,说白了就是一个集合了功能的大类库,包括springMVC,spring,spring data,spring security等等,并且提供了很多和可以和其他常用框架,插件完美整合的接口(只能说是一些常用框架,基本在github上能排上名次的都有完美整合,但如果是自己写的一个框架就无法实现快速整合)。
|
4月前
|
缓存 Java Maven
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
Java本地高性能缓存实践问题之SpringBoot中引入Caffeine作为缓存库的问题如何解决
126 1
|
7月前
|
Java 数据安全/隐私保护
Neo4j【付诸实践 01】SpringBoot集成报错org.neo4j.driver.exceptions.ClientException:服务器不支持此驱动程序支持的任何协议版本(解决+源代码)
Neo4j【付诸实践 01】SpringBoot集成报错org.neo4j.driver.exceptions.ClientException:服务器不支持此驱动程序支持的任何协议版本(解决+源代码)
370 1
|
3月前
|
Java 应用服务中间件 开发者
深入探索并实践Spring Boot框架
深入探索并实践Spring Boot框架
64 2
|
4月前
|
缓存 Java Spring
Java本地高性能缓存实践问题之在Spring Boot中启用缓存支持的问题如何解决
Java本地高性能缓存实践问题之在Spring Boot中启用缓存支持的问题如何解决
|
7月前
|
JavaScript Java 测试技术
返家乡”高校暑期社会实践微信小程序+springboot+vue.js附带文章和源代码设计说明文档ppt
返家乡”高校暑期社会实践微信小程序+springboot+vue.js附带文章和源代码设计说明文档ppt
42 0
|
7月前
|
Java API 时序数据库
InfluxData【付诸实践 02】SpringBoot 集成时序数据库 InfluxDB 应用分享(InfluxDB实例+Feign接口调用InfluxDB API)源码分享
InfluxData【付诸实践 02】SpringBoot 集成时序数据库 InfluxDB 应用分享(InfluxDB实例+Feign接口调用InfluxDB API)源码分享
179 0
|
JSON 前端开发 Java
【工作中问题解决实践 七】SpringBoot集成Jackson进行对象序列化和反序列化
【工作中问题解决实践 七】SpringBoot集成Jackson进行对象序列化和反序列化
446 0
|
弹性计算 Kubernetes 负载均衡
云原生之容器编排实践-以k8s的Service方式暴露SpringBoot服务
云原生之容器编排实践-以k8s的Service方式暴露SpringBoot服务
336 0
|
弹性计算 Kubernetes Cloud Native
云原生之容器编排实践-SpringBoot应用以Deployment方式部署到minikube以及弹性伸缩
云原生之容器编排实践-SpringBoot应用以Deployment方式部署到minikube以及弹性伸缩
249 0