SpringBoot如何使用日志Logback,及日志等级详解
Spring Boot默认已经集成了SLF4J(Simple Logging Facade for Java)作为日志的接口,以及Logback作为日志的实现。这意味着在大多数情况下,你无需做额外的配置即可开始记录日志。
下面是一个简要的指南,包括如何在Spring Boot应用中使用SLF4J和Logback,以及一些实际的代码示例。
默认集成
- 依赖管理:Spring Boot项目启动器(starter)已经包含了对SLF4J和Logback的依赖。当你创建一个新的Spring Boot项目时,这些依赖通常会自动加入。如果你需要手动添加,可以在
pom.xml
中确认或添加以下依赖:
<dependencies><!-- Spring Boot Starter Web 自动包含了日志相关的依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency>
</dependencies>
配置Logback
Spring Boot默认使用logback-spring.xml
或logback.xml
进行配置。如果没有自定义配置,它会使用内建的默认配置。
- 自定义配置:在
src/main/resources
目录下创建logback-spring.xml
文件来覆盖默认配置。例如,配置一个基础的日志级别和日志文件输出:
<?xml version="1.0" encoding="UTF-8"?>
<configuration><include resource="org/springframework/boot/logging/logback/base.xml"/><!-- 设置全局日志级别 --><root level="INFO"><appender-ref ref="FILE"/><appender-ref ref="STDOUT"/></root><!-- 定义文件日志 --><appender name="FILE" class="ch.qos.logback.core.FileAppender"><file>logs/app.log</file><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 控制台日志 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender>
</configuration>
实际代码使用
在你的Java类中,通过SLF4J的API记录日志。Spring Boot会自动为你注入一个Logger实例。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class LogController {private static final Logger log = LoggerFactory.getLogger(LogController.class);@GetMapping("/hello")public String hello() {log.debug("Debug message: This is a debug log.");log.info("Info message: This is an info log.");log.warn("Warn message: This is a warn log.");log.error("Error message: This is an error log.");return "Hello, World!";}
}
在上面的代码示例中,我们创建了一个简单的REST控制器,并在其中使用了不同级别的日志记录方法。
LoggerFactory.getLogger(LogController.class)
会返回一个Logger实例,这个实例对应于所在类的类名,这是记录日志的最佳实践。
然后,你可以调用debug()
, info()
, warn()
, 和 error()
方法来记录不同级别的日志信息。
日志输出等级是日志记录系统中用于区分日志重要性和详细程度的一种机制。不同级别的日志可以帮助开发者和运维人员更好地监控和诊断系统。
下面是常见的日志输出等级及其含义,按照从最低级别到最高级别的顺序排列:
-
TRACE: 这是最详细的日志级别,用于输出程序运行的详细跟踪信息,比如变量的详细变化、内部流程的每一步等。在调试复杂问题时非常有用,但在生产环境中通常关闭以减少日志量。
-
DEBUG: 提供调试信息,用于开发过程中跟踪程序的内部运行状态,比如进入和退出函数的信息、中间变量的状态等。这些信息对于日常开发和故障排查很有帮助,但同样,生产环境中可能只会保留关键模块的DEBUG日志。
-
INFO: 记录一般性的信息,表明系统正在按预期工作。这类日志包括应用程序启动、关闭、重要操作完成等事件。INFO日志在生产环境中通常是开启的,用于追踪系统的运行流程和状态。
-
WARN: 警告信息,指出系统中可能存在潜在的问题或不建议的操作,但不影响当前操作的继续执行。这类日志应当引起注意,可能需要检查或调整配置以防止未来发生更严重的问题。
-
ERROR: 错误信息,表示发生了应当被立即关注并修复的问题,如无法完成预期功能,但系统仍然可以运行。错误日志应详细记录错误发生的情景,以便于定位问题。
-
FATAL: 致命错误,表示非常严重的错误,可能导致应用程序崩溃或无法继续运行。这类日志极其重要,需要立即采取行动。有时,系统会在记录FATAL日志后自动终止进程。
日志级别设定的原则是,如果设置了某个级别的日志输出,那么所有比此级别严重(数值更大)的日志都会被记录下来。
例如,如果设置日志级别为INFO,那么INFO、WARN、ERROR和FATAL级别的日志都会被打印,而DEBUG和TRACE级别的日志则会被忽略。
在实际应用中,选择合适的日志级别对于确保系统性能、减少磁盘空间占用以及有效定位问题至关重要。
在开发阶段可能会使用较低的日志级别(如DEBUG),而在生产环境中则倾向于使用较高的日志级别(如INFO或WARN),以平衡日志的详细度和资源消耗。
相关文章:
SpringBoot如何使用日志Logback,及日志等级详解
Spring Boot默认已经集成了SLF4J(Simple Logging Facade for Java)作为日志的接口,以及Logback作为日志的实现。这意味着在大多数情况下,你无需做额外的配置即可开始记录日志。 下面是一个简要的指南,包括如何在Spring…...

若依启动run-modules-system.bat报错问题解决方案
在启动run-modules-system.bat时遇到了一些问题,在网上搜索无果后,排查解决完毕 1.启动nacos时,报错如下 Error creating bean with name grpcClusterServer: Invocation of init method failed; nested exception is java.io.IOException: Failed to bind to address 0.0.0.0…...

Aws CodeCommit代码仓储库
1 创建IAM用户 IAM创建admin用户,增加AWSCodeCommitFullAccess权限 2 创建存储库 CodePipeline -> CodeCommit -> 存储库 创建存储库 3 SSH 1) window环境 3.1.1 上载SSH公有秘钥 生成SSH秘钥ID 3.1.2 编辑本地 ~/.ssh 目录中名为“config”的 SSH 配置文…...
PostgreSQL的内存参数
PostgreSQL的内存参数 基础信息 OS版本:Red Hat Enterprise Linux Server release 7.9 (Maipo) DB版本:16.2 pg软件目录:/home/pg16/soft pg数据目录:/home/pg16/data 端口:5777PostgreSQL 提供了多种内存参数&#x…...
【教程】在CentOS上使用Docker部署前后端分离项目的完整指南
当在CentOS上使用Docker部署前后端分离项目时,需要遵循一系列步骤来实现这一目标。以下是每个步骤的详细内容: 步骤1:安装Docker和Docker Compose 1.1 安装Docker 在CentOS上安装Docker,可以按照以下步骤进行: sudo yum install -y yum-utils device-mapper-persistent…...

某公司新招了个牛逼的架构师后.....
网友评论: 架构师一个响指之后。第二天,老板不见了走走停停 回头已是数月图片是我的故事没错了,本来我们组有10个人,我把代码重构之后,只要半个人维护,于是老板要裁掉9个>人,于是我被搞走了图…...
云计算和雾计算
雾计算作为传统集中式数据存储系统(云)和边缘设备之间的中间层。雾扩展了云,使计算和数据存储更接近边缘。雾由多个节点(雾节点)组成,并创建一个本地网络,使其成为一个去中心化的生态系统——雾…...
正缘画像 api数据接口
测测正缘画像,相貌特征,高矮胖瘦,黑白美丑,对方何许人也,远嫁近娶,何方定居,家庭观,持家爱家,生活质量,富裕贫穷,健康情况,测算结果仅…...
Java 基础面试300题 (171- 200)
Java 基础面试300题 (171- 200) 171.什么是同步? 当多个线程试图同时访问共享资源时,那么他们需要以某种方式让资源一次只能由一个线程访问。实现这一目标的过程被称为同步。Java提供了一个名为synchronized的关键字实现这一目标…...

0基础学习Elasticsearch-使用Java操作ES
文章目录 1 背景2 前言3 Java如何操作ES3.1 引入依赖3.2 依赖介绍3.3 隐藏依赖3.4 初始化客户端(获取ES连接)3.5 发送请求给ES 1 背景 上篇学习了0基础学习Elasticsearch-Quick start,随后本篇研究如何使用Java操作ES 2 前言 建议通篇阅读再回…...
【Linux】GNU编译器基础
文章目录 GCCMakefile、make GCC 常见的GNU编译器是GCC其包含gcc以及g等,适用于C/C中,在Windows系统中通常使用IDE进行程序的编写和编译、链接等操作,但在Linux系统中通常使用GNU编译器来进行,对于C/C等高级语言需要进行预编译、编…...
Linux 软件安装:从源码编译到包管理器安装
Linux 软件安装:从源码编译到包管理器安装 在 Linux 操作系统中,软件安装是一个非常重要的任务。不同的软件安装方式有不同的优缺点,本篇博客将介绍 Linux 软件安装的几种方式,包括从源码编译安装、使用包管理器安装和使用第三方…...

Python3 match-case 语句
前言 本文主要介绍match-case语句与switch-case的区别,及match-case语句的基本用法。 文章目录 前言一、switch-case 和match-case的区别二、match-case的基本用法1、可匹配的数据类型2、多条件匹配3、通配符匹配 一、switch-case 和match-case的区别 C语言里面s…...
图论第三天
似乎要团建了,我再猫会。我必须参与上团建再走。 130.被围绕的区域 先把外围的O变成A,再把飞地的O变成X,再把外围A变回O class Solution { public:int neighbor[4][2] {1,0,0,-1,-1,0,0,1};void solve(vector<vector<char>>&a…...

计算机网络学习2
文章目录 信道复用技术 第三章数据链路层概述数据链路层的三个重要问题封装成帧和透明传输差错检测可靠传输的相关基本概念可靠传输的实现机制停止等待协议回退N帧协议选择重传协议 点对点协议PPP共享式以太网网络适配器和MAC地址CSMA_CD协议的基本原理共享式以太网的争用期共享…...

unittest框架
目录 框架: unittest框架: 使用的原因: 核心要素(组成): TestCase测试用例: 可能出现的错误: TestSuite(测试套件): TestRunner(测试执行): 整体步骤: 查看执行结果: TestLoader测试加载: 方法级别Fixture: 类级别Fixture: 模块级别Fixture: 用例脚本…...
Python中的__str__和__repr__:揭示字符串表示的奥秘
标题:Python中的__str__和__repr__:揭示字符串表示的奥秘 摘要 在Python中,对象的字符串表示对于调试和日志记录至关重要。__str__和__repr__是两个特殊的方法,用于定义对象的字符串表示形式。尽管它们在功能上相似,…...

gazebo插入一个图片
在下面的目录下添加文件夹 my_ground_plane 文件夹内容如下 model.sdf <?xml version"1.0" encoding"UTF-8"?> <sdf version"1.4"><model name"my_ground_plane"><static>true</static><link na…...
(已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
Modals是Bootstrap中用户弹框用的组件,使用时不需要额外引入其他插件,在引入了boostrap.js或者boostrap.min.js前提下就可以使用。 官方的示例: <!-- Button trigger modal --> <button type="button" class="btn btn-primary" data-bs-…...
网络编程介绍(IP)(一)
定义:可以让设备中的程序与网络上其他设备中的程序进行数据交互(实现网络通信的)。 java.net.*包下提供了网络编程的解决方案。 基本的通信架构: CS架构( Client客户端/Server服务端 ): Clie…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

DBAPI如何优雅的获取单条数据
API如何优雅的获取单条数据 案例一 对于查询类API,查询的是单条数据,比如根据主键ID查询用户信息,sql如下: select id, name, age from user where id #{id}API默认返回的数据格式是多条的,如下: {&qu…...

【Java_EE】Spring MVC
目录 Spring Web MVC 编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 编辑参数重命名 RequestParam 编辑编辑传递集合 RequestParam 传递JSON数据 编辑RequestBody …...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...