SpringBoot支持哪些日志框架?推荐和默认的日志框架是哪个?

文章目录

  • 一、介绍
    • 1、支持的类型
    • 2、日志级别
  • 二、实战
    • 1、logback
    • 2、Log4j2
  • 三、总结

一、介绍

1、支持的类型

SpringBoot支持多种日志框架,包括Logback、Log4j2和Java Util Logging(JUL)。默认情况下,如果你使用SpringBoot的starters启动器,它将使用Logback作为日志框架。

Logback:Logback是SpringBoot默认的日志框架,它是Log4j的继任者,提供了更好的性能和可靠性。你可以通过在资源目录下创建一个logback-spring.xml文件来配置Logback。
Log4j2:Log4j2是Log4j的升级版,它在性能和功能上都有所提升,支持异步日志和插件机制。如果你想在SpringBoot中使用Log4j2,你需要添加相应的依赖并在配置文件中指定Log4j2作为日志框架。
Java Util Logging(JUL):JUL是Java SE的默认日志框架,SpringBoot可以配置使用JUL作为日志框架,但一般不推荐使用,因为它的性能和灵活性相对较差。
除了上述日志框架外,SpringBoot还支持SLF4J和Commons Logging这两个日志门面。这些门面可以与多种日志实现进行集成,使得你可以在不改变代码的情况下更换日志框架。

无论使用哪种日志框架,SpringBoot都支持配置将日志输出到控制台或者文件中。你可以在application.properties或application.yml配置文件中设置日志级别、输出格式等参数。

2、日志级别

在日志系统中,通常会定义不同的日志级别,用于标识日志的重要性或严重性。以下是常见的日志级别,按照从低到高的顺序排列:

ALL:所有日志。
DEBUG:用于调试信息,通常用于开发和调试阶段。
INFO:提供程序运行时的重要信息,用于指示应用程序正常运行。
WARN:表示潜在的问题,不会导致应用程序失败,但可能需要关注。
ERROR:表示错误事件,可能导致应用程序出现问题。
OFF:关闭日志。

二、实战

下面我们主要介绍2种比较常用的日志框架

1、logback

添加依赖

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId>
</dependency>

在src/main/resources目录下创建一个名为logback-spring.xml的配置文件,Spring Boot会默认加载这个配置文件。Spring Boot官方推荐优先使用带有-spring的文件名作为日志配置。

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 定义全局变量,日志文件路径和格式 --><property name="log.path" value="${LOG_PATH}"/><property name="log.name" value="${LOG_FILE}"/><property name="file.pattern" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger{50} - %msg%n"/><!-- 控制台输出配置 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>${file.pattern}</pattern></encoder><!-- 只输出DEBUG级别及以上的日志 --><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>DEBUG</level></filter></appender><!-- 文件输出配置 --><appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/${log.name}.info.log</file><encoder><pattern>${file.pattern}</pattern></encoder><!-- 只输出INFO级别的日志 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>INFO</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.path}/%d{yyyy-MM-dd}/${log.name}.info.%d{yyyy-MM-dd}-%i.log</fileNamePattern><!-- 每个文件最大10MB --><maxFileSize>10MB</maxFileSize><!-- 最多保留30天的历史记录 --><maxHistory>30</maxHistory></rollingPolicy></appender><!-- 文件输出配置 --><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}/${log.name}.error.log</file><encoder><pattern>${file.pattern}</pattern></encoder><!-- 只输出ERROR级别的日志 --><filter class="ch.qos.logback.classic.filter.LevelFilter"><level>ERROR</level><onMatch>ACCEPT</onMatch><onMismatch>DENY</onMismatch></filter><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${log.path}/%d{yyyy-MM-dd}/${log.name}.error.%d{yyyy-MM-dd}-%i.log</fileNamePattern><!-- 每个文件最大10MB --><maxFileSize>10MB</maxFileSize><!-- 最多保留30天的历史记录 --><maxHistory>30</maxHistory></rollingPolicy></appender><!-- 设置root logger --><root level="INFO"><appender-ref ref="STDOUT"/><appender-ref ref="INFO_FILE"/><appender-ref ref="ERROR_FILE"/></root></configuration>

filter过滤器参数说明:

  • ThresholdFilter:基于单个日志级别进行过滤,简单但功能有限。
  • LevelFilter:基于一个范围的日志级别进行过滤,提供了比 ThresholdFilter 更多的灵活性。
  • EvaluatorFilter:基于自定义表达式进行过滤,提供了最大的灵活性。

添加配置文件,定义我们的日志文件路径和文件名

logging.file.path=D:/dev
logging.file.name=forlan-old

使用的话,可以通过依赖注入或静态方式来使用Logger,如下:

public class LogController {private static final Logger logger = LoggerFactory.getLogger(LogController.class);@PostMapping("/logback")public String logback(String value) {logger.trace("logback测试trace日志打印");logger.debug("logback测试debug日志打印");logger.info("logback测试info日志打印");logger.warn("logback测试warn日志打印");logger.error("logback测试error日志打印");return value;}
}

2、Log4j2

添加Log4j2依赖,并排除Spring Boot的默认日志配置

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

在src/main/resources目录下创建一个名为log4j2-spring.xml的配置文件,Spring Boot会默认加载这个配置文件。Spring Boot官方推荐优先使用带有-spring的文件名作为日志配置。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><!-- 定义全局变量,日志文件路径和格式 --><Properties><Property name="log.path">D:/dev</Property><Property name="log.name">forlan-log4j2</Property><Property name="file.pattern">%d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{50} - %msg%n</Property></Properties><!-- 控制台输出配置 --><Appenders><Console name="STDOUT" target="SYSTEM_OUT"><PatternLayout pattern="${file.pattern}"/><ThresholdFilter level="DEBUG"/></Console><!-- 文件输出配置 --><RollingFile name="INFO_FILE" fileName="${log.path}/${log.name}.info.log"filePattern="${log.path}/%d{yyyy-MM-dd}/${log.name}.info.%d{yyyy-MM-dd}-%i.log"><PatternLayout pattern="${file.pattern}"/><LevelMatchFilter level="INFO" onMatch="ACCEPT" onMismatch="DENY"/><!-- 每个文件最大10MB --><SizeBasedTriggeringPolicy size="10MB"/><!-- 最多保留30天的历史记录 --><DefaultRolloverStrategy max="30"/></RollingFile><!-- 文件输出配置 --><RollingFile name="ERROR_FILE" fileName="${log.path}/${log.name}.error.log"filePattern="${log.path}/%d{yyyy-MM-dd}/${log.name}.error.%d{yyyy-MM-dd}-%i.log"><PatternLayout pattern="${file.pattern}"/><LevelMatchFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY"/><!-- 每个文件最大10MB --><SizeBasedTriggeringPolicy size="10MB"/><!-- 最多保留30天的历史记录 --><DefaultRolloverStrategy max="30"/></RollingFile></Appenders><!-- 设置root logger --><Loggers><Root level="INFO"><AppenderRef ref="STDOUT"/><AppenderRef ref="INFO_FILE"/><AppenderRef ref="ERROR_FILE"/></Root></Loggers>
</Configuration>

混淆参数说明:

  • <Configuration status=“DEBUG”>:设置了Log4j2框架本身的日志记录级别,也就是Log4j2内部操作和配置加载相关的调试信息。
  • <ThresholdFilter level=“DEBUG”>:设置的是我们代码中的日志记录级别,会影响被该过滤器作用的Appender。
  • <Root level=“DEBUG”>:设置的是我们代码中的日志记录级别,会影响根记录器及其子Logger,如果Appender没有设置就会默认使用它的

如果前面的文件名不是以-spring结尾,就需要添加配置文件,比如:

logging.config=classpath:log4j2.xml

使用的话,可以通过依赖注入或静态方式来使用Logger,如下:

public class LogController {private static final Logger logger = LoggerFactory.getLogger(LogController.class);@PostMapping("/log4j2")public String log4j2(String value) {logger.trace("log4j2测试trace日志打印");logger.debug("log4j2测试debug日志打印");logger.info("log4j2测试info日志打印");logger.warn("log4j2测试warn日志打印");logger.error("log4j2测试error日志打印");return value;}
}

三、总结

总的来说,推荐使用Logback,配置简单,性能也还不错,而且是SpringBoot的默认日志框架,此外,还可以支持skywalking,只需要简单改下配置即可,如下:

<encoder class="ch.qos.logback.core.encoder.LayoutWrappingEncoder"><layout class="org.apache.skywalking.apm.toolkit.log.logback.v1.x.TraceIdPatternLogbackLayout"><Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%tid] [%thread] %logger{50} - %msg%n</Pattern></layout>
</encoder>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/691104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数学在现代经济学研究中的作用

数学在现代经济学研究中的作用 The Role of Mathematics in Modern Economic Research 经济学&#xff0c;作为一门研究人类如何在资源有限的情况下做出选择的社会科学&#xff0c;历来都与数学有着紧密的联系。随着科技的发展&#xff0c;特别是在信息时代数据量的爆炸性增长&…

【漏洞复现】H3C 路由器多系列信息泄露漏洞

Nx01 产品简介 H3C路由器是一款高性能的路由器产品&#xff0c;具有稳定的性能和丰富的功能。它采用了先进的路由技术和安全机制&#xff0c;可以满足不同用户的需求&#xff0c;广泛应用于企业、运营商和数据中心等领域。 Nx02 漏洞描述 H3C路由器多系列存在信息泄露漏洞&…

林浩然与杨凌芸的Java奇遇记:Map世界的恋爱攻略

林浩然与杨凌芸的Java奇遇记&#xff1a;Map世界的恋爱攻略 The Java Adventure of Lin Haoran and Yang Lingyun: Love Strategy in the Map World 在一个充满代码香气的世界里&#xff0c;男主角林浩然&#xff0c;一个热衷于Java编程的程序员大侠&#xff0c;以其深厚的内功…

K8s进阶之路-核心概念/架构:

架构&#xff1a;Master/Node Master组件--主控节点{ 负责集群管理&#xff08;接收用户事件转化成任务分散到node节点上&#xff09;} Apiserver&#xff1a; 资源操作的唯一入口&#xff0c;提供认证、授权、API注册和发现等机制 Scheduler &#xff1a; 负责集群资源调度&am…

【CentOS】Linux 文件与目录管理

目录 1、目录的切换、新增和删除 &#xff08;1&#xff09;cd (change directory&#xff0c;切换目录) &#xff08;2&#xff09;pwd (显示目前所在的目录) &#xff08;3&#xff09;mkdir (make directory&#xff0c;建立新目录 ) &#xff08;4&#xff09;rmdir (…

基于SSM的疫情期间学生信息管理平台的设计与实现(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的疫情期间学生信息管理平台的设计与实现&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

CSS 实现 3D 书本展开动效

一、前言 本文将使用纯 CSS 实现一个简单的 3D 书本展开动效。 二、实现思路 实现这么一个书本动效 乍一看可能会感觉有些复杂&#xff0c;实际上并不难&#xff0c;遇到这种组合动效的需求时&#xff0c;我们只要将整体拆分成多个小步骤去做&#xff0c;就很简单了。 1. 拆…

RabbitMQ的安装与使用

RabbitMQ的安装与使用 介绍一、RabbitMQ的安装1 查找镜像2 拉取镜像3 查看镜像4 创建容器5 查看容器6 访问测试 二、RabbitMQ的使用1 创建项目2 配置文件3 队列配置文件4 消费者5 生产者6 测试 三、交换器四、普通队列Demo五、死信队列Demo1 介绍2 示例2.1 配置2.2 生产者2.3 消…

10_Java泛型

一、为什么要有泛型 1.泛型的设计背景 集合容器类在设计阶段/声明阶段不能确定这个容器到底实际存的是什么类型的对象&#xff0c;所以在JDK1.5之前只能把元素类型设计为Object&#xff0c;JDK1.5之后使用泛型来解决。因为这个时候除了元素的类型不确定&#xff0c;其他的部分…

Qt C++春晚刘谦魔术约瑟夫环问题的模拟程序

什么是约瑟夫环问题&#xff1f; 约瑟夫问题是个有名的问题&#xff1a;N个人围成一圈&#xff0c;从第一个开始报数&#xff0c;第M个将被杀掉&#xff0c;最后剩下一个&#xff0c;其余人都将被杀掉。例如N6&#xff0c;M5&#xff0c;被杀掉的顺序是&#xff1a;5&#xff…

14. UE5 RPG使用曲线表格设置回复血量值

之前的文章中&#xff0c;我使用的都是固定的数值来设置血量回复或者蓝量回复&#xff0c;在这篇文章里面&#xff0c;介绍一下使用曲线表格。通过曲线表格我们可以设置多个数值&#xff0c;然后通过去通过修改索引对应的数值去修改回复的血量或者蓝量。 创建曲线表格 首先创…

缓存使用常见思路及问题

缓存是我们用来减少数据库访问的常见操作&#xff0c;里面的一些常见思路及问题这里总结下。下面以redis举例。 使用方式分类&#xff1a; 一&#xff0c;只读缓存。 只读缓存时&#xff0c;会先看redis里有无数据&#xff0c;有则直接返回。没有则走数据库查询一次&#xff…

基于python+django+vue.js开发的停车管理系统

功能介绍 平台采用B/S结构&#xff0c;后端采用主流的Python语言进行开发&#xff0c;前端采用主流的Vue.js进行开发。 功能包括&#xff1a;车位管理、会员管理、停车场管理、违规管理、用户管理、日志管理、系统信息模块。 源码地址 https://github.com/geeeeeeeek/pytho…

k8s实用命令

查看pod运行在哪个node里面 kubectl get pod -o wide // 查看所有的pod运行在哪个node节点kubectl get pod pod名 -o wide // 查看指定pod运行在哪个node节点查看pod事件 kubectl describe pod <pod-name> 查看pod的详细信息 kubectl get pod <pod 名称> -o…

林浩然与杨凌芸的Java奇遇记:字节流世界的二进制爱情

林浩然与杨凌芸的Java奇遇记&#xff1a;字节流世界的二进制爱情 The Java Adventure of Lin Haoran and Yang Lingyun: Binary Love in the Byte Stream World 在编程宇宙中&#xff0c;有一对程序员CP——林浩然和杨凌芸&#xff0c;他们共同编织着Java王国里那些神秘而又充满…

微服务中4种应对跨库Join的思路

微服务或soa服务化&#xff0c;可以把一个大系统划分为n个小系统&#xff0c;独自运行&#xff0c;就意味者垂直分库&#xff0c;垂直分库就意味者数据层面的查询需跨库查询&#xff0c;应对的解决方案&#xff1a; 1.依赖字段较少&#xff1a;字段冗余 A库中的Tab…

MySQL--SQL解析顺序

前言&#xff1a; 一直是想知道一条SQL语句是怎么被执行的&#xff0c;它执行的顺序是怎样的&#xff0c;然后查看总结各方资料&#xff0c;就有了下面这一篇博文了。 本文将从MySQL总体架构—>查询执行流程—>语句执行顺序来探讨一下其中的知识。 一、MySQL架构总览&a…

Swift Combine 使用从 PassthroughSubject 预定好的发送的事件测试订阅者 从入门到精通二十三

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Com…

MSS与cwnd的关系,rwnd又是什么?

慢启动算法是指数递增的 这种指数增长的方式是慢启动算法的一个核心特点&#xff0c;它确保了TCP连接在开始传输数据时能够快速地探测网络的带宽容量&#xff0c;而又不至于过于激进导致网络拥塞。具体来说&#xff1a; 初始阶段&#xff1a;当TCP连接刚建立时&#xff0c;拥…

ubuntu屏幕小的解决办法

1. 安装vmware tools , 再点自适应客户机 执行里面的vmware-install.pl这个文件 &#xff1a;sudo ./vmware-install.pl 执行不了可以放到家目录&#xff0c;我放在了/home/book 里面 最后点这个自适应客户机 然后我这里点不了是因为我点了控制台视图和拉伸客户机&#xff0c…