【Springboot系列】SpringBoot 中的日志如何工作的,看完这一篇就够了

文章目录

      • 强烈推荐
      • 引言
      • Spring Boot 中的日志是怎么工作
        • 日志框架选择
        • 配置文件
        • 日志级别
        • 自定义日志配置
        • 集成第三方日志库
        • 实时监控和日志管理
      • Log4j2工作原理分析
        • 1. 核心组件
        • 2. 配置文件
        • 3. Logger的继承和层次结构
        • 4. 日志事件处理流程
        • 5. 异步日志
      • 总结
      • 强烈推荐
      • 专栏集锦
      • 写在最后

579a429daf314744b995f37351b46548

强烈推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能

b004071ozy_05_amzn

推荐一个个人工作,日常中比较常用的人工智能工具,无需魔法,忍不住分享一下给大家。点击跳转到网站:人工智能工具

image-20240329011034493


引言

在软件开发中,日志记录是一个至关重要的部分,它不仅帮助开发者调试和诊断问题,还在系统监控和安全审计中发挥重要作用。

Spring Boot 作为一个流行的Java框架,提供了强大的日志记录机制,使开发者可以轻松地集成和配置日志功能。

本文将深入探讨Spring Boot中的日志工作原理,帮助您更好地理解和利用这一功能。


Spring Boot 中的日志是怎么工作

日志框架选择

Spring Boot 默认支持多种日志框架,包括Logback、Log4j2和Java Util Logging (JUL)。在没有特定配置的情况下,Spring Boot 会自动选择Logback作为日志框架。这种默认配置使得开发者可以开箱即用地享受日志功能,而无需额外配置。

配置文件

Spring Boot 使用外部配置文件(例如application.properties或application.yml)来配置日志。常见的配置包括日志级别、输出格式和日志文件位置。例如:

logging.level.root=INFO
logging.level.com.example.myapp=DEBUG
logging.file.name=app.log
logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss} - %msg%n

这些配置可以细粒度地控制不同包和类的日志级别,使开发者能够针对不同的需求进行调整。

日志级别

Spring Boot 支持的日志级别有TRACE、DEBUG、INFO、WARN、ERROR、FATAL和OFF。每个级别控制不同的详细程度,开发者可以根据具体需求选择适当的级别。日志级别的配置既可以在全局范围内设置,也可以针对特定的包或类进行设置。

自定义日志配置

除了简单的配置文件,Spring Boot 还允许使用更为复杂的日志配置。例如,开发者可以通过Logback的XML配置文件来定义更加复杂的日志规则和行为:

<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

这种配置方式提供了比简单配置文件更高的灵活性和可定制性。

集成第三方日志库

Spring Boot 还支持与第三方日志库的集成,例如SLF4J和Commons Logging。通过这些库,开发者可以使用统一的API记录日志,而实际的日志实现由底层框架决定。这种抽象层使得日志记录更加灵活和便于维护。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyApp {
    private static final Logger logger = LoggerFactory.getLogger(MyApp.class);

    public static void main(String[] args) {
        logger.info("Application started");
        // Other code
    }
}
实时监控和日志管理

Spring Boot 还支持将日志数据发送到外部的日志管理和监控系统,例如ELK(Elasticsearch, Logstash, Kibana)或Splunk。这些集成能够帮助开发者实时监控应用的运行状态,并进行复杂的日志分析和报表生成。


Log4j2工作原理分析

Log4j2是Apache Log4j项目的第二代版本,是Java应用中广泛使用的日志框架之一。

它提供了强大的功能和灵活的配置,能够满足各种日志记录需求。

1. 核心组件

Log4j2的工作原理可以通过其核心组件来理解,这些组件包括Logger、Appender、Layout和Filter。

  • Logger:日志记录器,是Log4j2的核心接口。Logger负责捕获日志事件并将其传递给配置的Appender。每个Logger都有一个名称,并且可以继承父Logger的配置。
  • Appender:日志输出器,负责将日志事件输出到特定的目标位置,如控制台、文件、数据库等。常见的Appender包括ConsoleAppender、FileAppender和RollingFileAppender。
  • Layout:布局,负责将日志事件格式化为特定的输出格式。常见的布局包括PatternLayout、JSONLayout和HTMLLayout。
  • Filter:过滤器,用于对日志事件进行过滤,以决定是否将其输出。Filter可以应用在Logger和Appender上,提供灵活的日志控制。
2. 配置文件

Log4j2支持多种配置文件格式,包括XML、JSON、YAML和properties。下面是一个简单的YAML配置示例:

Configuration:
  status: warn
  appenders:
    console:
      name: Console
      target: SYSTEM_OUT
      PatternLayout:
        pattern: "%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"
  loggers:
    root:
      level: info
      AppenderRef:
        - ref: Console
    logger:
      - name: com.example.myapp
        level: debug
        additivity: false
        AppenderRef:
          - ref: Console
3. Logger的继承和层次结构

Log4j2的Logger具有层次结构,子Logger可以继承父Logger的配置。例如,com.examplecom.example.myapp的父Logger。如果com.example.myapp没有明确配置,则会继承com.example的配置。这种层次结构使得日志配置更加灵活和简洁。

4. 日志事件处理流程

当应用程序调用Logger记录日志时,Log4j2会按照以下流程处理日志事件:

  1. 日志记录:应用程序调用Logger的记录方法(如logger.info())。
  2. 日志过滤:Logger和Appender中的Filter对日志事件进行过滤,决定是否处理该日志事件。
  3. 日志格式化:如果日志事件通过过滤,Appender会使用配置的Layout对日志事件进行格式化。
  4. 日志输出:格式化后的日志事件由Appender输出到指定目标位置(如控制台或文件)。
5. 异步日志

Log4j2支持异步日志,可以显著提高日志记录的性能。异步日志将日志事件放入队列中,独立的线程从队列中取出日志事件并进行处理。这种方式减少了应用主线程的阻塞时间,适用于高并发环境。

下面是一个使用异步日志的YAML配置示例:

Configuration:
  status: warn
  appenders:
    console:
      name: Console
      target: SYSTEM_OUT
      PatternLayout:
        pattern: "%d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n"
    async:
      name: Async
      AppenderRef:
        - ref: Console
  loggers:
    root:
      level: info
      AppenderRef:
        - ref: Async

总结

通过本文的介绍,相信您已经对Spring Boot中的日志工作原理有了全面的了解。

日志记录不仅是开发过程中不可或缺的一部分,更是维护和优化应用的重要工具。

充分利用Spring Boot提供的日志功能,您可以更高效地进行调试、监控和维护工作,确保应用的稳定和高效运行。

强烈推荐

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站:人工智能

b004071ozy_05_amzn

推荐一个个人工作,日常中比较常用的人工智能工具,无需魔法,忍不住分享一下给大家。点击跳转到网站:人工智能工具

image-20240329011034493


专栏集锦

大佬们可以收藏以备不时之需:

Spring Boot 专栏:http://t.csdnimg.cn/peKde

ChatGPT 专栏:http://t.csdnimg.cn/cU0na

Java 专栏:http://t.csdnimg.cn/YUz5e

Go 专栏:http://t.csdnimg.cn/Jfryo

Netty 专栏:http://t.csdnimg.cn/0Mp1H

Redis 专栏:http://t.csdnimg.cn/JuTue

Mysql 专栏:http://t.csdnimg.cn/p1zU9

架构之路 专栏:http://t.csdnimg.cn/bXAPS


写在最后

感谢您的支持和鼓励! 😊🙏

如果大家对相关文章感兴趣,可以关注公众号"架构殿堂",会持续更新AIGC,java基础面试题, netty, spring boot, spring cloud等系列文章,一系列干货随时送达!

如果有项目或者毕设合作,请V:fengyelin8866,备注毕设

csdn-end

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

免费图片文字转换成文本,ocr文字识别软件免费版,真的太实用了!

截屏短视频上一段扎心文字&#xff0c;想把它发到朋友圈怎么办&#xff1f;这时候就需要一个OCR识别软件。 它就像一个聪明的小助手&#xff0c;它可以帮助电脑“看懂”书本上或者图片里的字。就像我们用眼睛看字一样&#xff0c;OCR软件用它的“眼睛”扫描图片&#xff0c;识…

C语言代码错误(一)

今天在写选择排序代码时&#xff0c;在测试数据发现不能显示结果 1、代码如下&#xff1a; #include <stdio.h>int main(void) {int i, j; // 循环变量int MinIndex; // 保存最小的值的下标int buf; // 互换数据时的临时变量int n;printf("你想输入多少个数据n:\n…

乐理学习-音及音名

1. 我觉得练习题很重要。我要得到一个反馈 所以我想没学习完书中的一节就要把练习题做下来&#xff0c;虽然慢点也可以。 2. 做个小计划。 今天计算了一下学完《基本乐理-李重光》如果每天3张。也要80天干完&#xff0c;希望能有一天可以学习7张的速度的时候。 3. 练习记录…

【除自身以外数组的乘积】python

目录 思路&#xff1a; 代码&#xff1a; 思路&#xff1a; 直接计算前缀乘积&#xff0c;后缀乘积&#xff0c;然后相乘即可 开始我还在想&#xff0c;遍历一次i&#xff0c;怎么能同时计算前缀乘积和后缀乘积&#xff0c;事实上分开计算比较方便。。 代码&#xff1a; cl…

Spark运行模式详解

Spark概述 Spark 可以在多种不同的运行模式下执行&#xff0c;每种模式都有其自身的特点和适用场景。 部署Spark集群大体上分为两种模式&#xff1a;单机模式与集群模式。大多数分布式框架都支持单机模式&#xff0c;方便开发者调试框架的运行环境。但是在生产环境中&#xff…

聊聊变异测试

软件质量保障 所寫即所思&#xff5c;一个阿里质量人对测试的所感所悟。 1. 介绍 有句话说&#xff1a;证实容易&#xff0c;证伪难。正如测试一样&#xff0c;证明缺陷存在容易&#xff0c;但证明不存在缺陷难。而变异测试颠覆了这一原则&#xff0c;如果我们知道存在缺陷&am…

开发依赖与运行依赖

1. 概念 开发依赖&#xff1a;devDependencies 运行依赖&#xff1a;dependencies 2. 理解 &#xff08;1&#xff09;devDependencies 在线上状态不需要使用的依赖&#xff0c;就是开发依赖。为什么 npm 要把它单独分拆出来呢&#xff1f;最终目的是为了减少 node_modul…

ElasticSearch插件版本与ES版本不对应的解决方案

一、背景 最近需要给es安装ik、hanlp分词器和ingest-attachment管道&#xff0c;服务器已有的es版本为8.5.3&#xff08;似乎太新了&#xff09;&#xff0c;hanlp和ingest-attachment都没有这么高的版本&#xff0c;因此只能下载相对老的版本&#xff0c;然后自己修改配置文件…

Linux定时计划

定时计划 一、计划任务种类 突发性&#xff1a;临时决定只执行一次的任务 at&#xff1a;处理执行一次任务就结束定时性&#xff1a;每隔一定时间需要重复执行此命令 crontab&#xff1a;指定任务&#xff0c;按照设定的周期一直循环执行二、作用 定时任务可以用于自动备份…

Java Swing + MySQL图书借阅管理系统

系列文章目录 Java Swing MySQL 图书管理系统 Java Swing MySQL 图书借阅管理系统 文章目录 系列文章目录前言一、项目展示二、部分代码1.Book2.BookDao3.DBUtil4.BookAddInternalFrame5.Login 三、配置 前言 项目是使用Java swing开发&#xff0c;界面设计比较简洁、适合作…

冯喜运:5.27黄金暴跌大阴后出现“暂定符”今日黄金原油操作策略

【黄金消息面分析】&#xff1a;金价虽然有大阴线暴跌&#xff0c;但依然属于超买后的调整而非熊市&#xff0c;对中长线投资者来说只是市场洗牌。因此&#xff0c;在出现企稳迹象之后&#xff0c;随时关注反弹时机的启动。未来几日&#xff0c;黄金空头可能在进一步发力之前需…

【机器学习结合AI绘画工具】——开启艺术创作的新纪元

目录 一、AI绘画工具的发展历程 二、AI绘画工具的技术原理 实例说明 三、AI绘画工具在艺术创作中的应用 实例网站 四、AI绘画工具的影响与未来展望 结论 机器学习和人工智能&#xff08;AI&#xff09;在过去的十年里取得了显著的进展。特别是在艺术创作领域&#xff0c…

Qt 对话框或者QMainWindow等类中调用自定义QWidget继承组件

简单的方法如下所示 1、创建一个ui文件&#xff0c;界面布局放入QVBoxLayout或者QHBoxLayout 使用他来放入自定义组件&#xff0c;类似如下 2、代码如下&#xff1a; ui.setupUi(this); { //自定义组价如下 KwTable *Table new KwTable(this); ui.vertical…

Java中的类加载器

类加载器 1.什么是类加载器&#xff1f; 启动类加载器&#xff08;Bootstrap ClassLoader&#xff09;&#xff1a;这是JVM自带的类加载器&#xff0c;负责加载Java的核心类库&#xff0c;如rt.jar等。由于安全原因&#xff0c;启动类加载器加载的类不能被其他类加载器加载的类…

python 两个表格字段列名称值,对比字段差异

支持xlsx,xls文件&#xff0c;相互对比字段列 输出两个表格文件相同字段&#xff0c;置底色为绿色 存在差异的不同字段&#xff0c;输出两个新的表格文件&#xff0c;差异字段&#xff0c;置底色为红色 import pandas as pd from openpyxl import load_workbook from openpy…

【云原生】Kubernetes-----POD资源限制与探针机制

目录 引言 一、资源限制 &#xff08;一&#xff09;基本定义 &#xff08;二&#xff09;资源单位 1.CPU资源 2.内存资源 &#xff08;三&#xff09;请求与限制 &#xff08;四&#xff09;定义方式 1.编写yaml文件 2.查看资源情况 &#xff08;五&#xff09;资源…

Gradient-checkpointing的原理

原文&#xff1a; 将更大的网络安装到内存中。|by 雅罗斯拉夫布拉托夫 |张量流 |中等 (medium.com) 前向传播时&#xff0c;隔几层就保留一层activation数据&#xff0c;其余层的activation都释放掉&#xff1b; 反向传播时&#xff0c;从最近的checkpoint去重新跑forward&…

Cohere继Command-R+之后发布大模型Aya-23,性能超越 Gemma、Mistral 等,支持中文

前言 近年来&#xff0c;多语言大模型&#xff08;MLLM&#xff09;发展迅速&#xff0c;但大多数模型的性能依然存在显著差距&#xff0c;尤其是在非英语语言方面表现不佳。为了推动多语言自然语言处理技术的发展&#xff0c;Cohere团队发布了新的多语言指令微调模型家族——…

cpolar内网穿透工具—无需部署,远程访问网址

文章目录 cpolar介绍安装教程隧道管理VIP客户cpolar介绍 cpolar是一种安全的内网穿透服务,它将局域网下面的本地服务器通过加密隧道暴露至公网,使得公网用户可以正常访问内网服务。 只需一行命令,就可以将内网站点发布至公网,方便给客户演示。高效调试微信公众号、小程序…

设计模式:适配器模式(Adapter)

设计模式&#xff1a;适配器模式&#xff08;Adapter&#xff09; 设计模式&#xff1a;适配器模式&#xff08;Adapter&#xff09;模式动机模式定义模式结构时序图模式实现在单线程环境下的测试在多线程环境下的测试模式分析优缺点适用场景应用场景应用实例适配器模式和代理模…