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

news2024/12/26 22:29:58

文章目录

      • 强烈推荐
      • 引言
      • 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

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

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

相关文章

【MySQL进阶之路 | 基础篇】MySQL新特性 : 窗口函数

1. 前言 (1). MySQL8开始支持窗口函数. 其作用类似于在查询中对数据进行分组(GROUP BY)&#xff0c;不同的是&#xff0c;分组操作会把分组的结果聚合成一条记录. 而窗口函数是将结果置于每一条数据记录中. (2). 窗口函数还可以分为静态窗口函数和动态窗口函数. 静态窗口函数…

堆(建堆算法,堆排序)

目录 一.什么是堆&#xff1f; 1.堆 2.堆的储存 二.堆结构的创建 1.头文件的声明&#xff1a; 2.向上调整 3.向下调整 4.源码&#xff1a; 三.建堆算法 1.向上建堆法 2.向下建堆法 四.堆排序 五.在文件中Top出最小的K个数 一.什么是堆&#xff1f; 1.堆 堆就…

AIGC产业链上下游解析及常见名词

文章目录 AIGC上游产业链 - 基础层AIGC中游产业链 - 大模型层与工具层AIGC下游产业链 - 应用层AIGC产业链常见的名词表 在上一章节为大家介绍了 “大模型的不足与解决方案” &#xff0c;这一小节呢为大家针对AIGC的相关产业进行一个拆解&#xff0c;以及相关的一些专业名词做出…

RK3568笔记二十六:音频应用

若该文为原创文章&#xff0c;转载请注明原文出处。 一、介绍 音频是我们最常用到的功能&#xff0c;音频也是 linux 和安卓的重点应用场合。 测试使用的是ATK-DLR3568板子&#xff0c;板载外挂RK809 CODEC芯片&#xff0c;RK官方驱动是写好的&#xff0c;不用在自己重新写。…

C语言 | Leetcode C语言题解之第113题路径总和II

题目&#xff1a; 题解&#xff1a; int** ret; int retSize; int* retColSize;int* path; int pathSize;typedef struct {struct TreeNode* key;struct TreeNode* val;UT_hash_handle hh; } hashTable;hashTable* parent;void insertHashTable(struct TreeNode* x, struct Tr…

第八篇【传奇开心果系列】Python微项目技术点案例示例:以微项目开发为案例,深度解读Dearpygui 编写图形化界面桌面程序的优势

传奇开心果博文系列 系列博文目录Python微项目技术点案例示例系列 博文目录前言一、开发图形化界面桌面程序的优势介绍二、跨平台特性示例代码和解析三、高性能特性示例代码和解析四、简单易用特性示例代码和解析五、扩展性强示例代码和解析六、现代化设计示例代码和解析七、知…

【PB案例学习笔记】-09滚动条使用

写在前面 这是PB案例学习笔记系列文章的第8篇&#xff0c;该系列文章适合具有一定PB基础的读者。 通过一个个由浅入深的编程实战案例学习&#xff0c;提高编程技巧&#xff0c;以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码&#xff0c;小凡都上传到了gitee…

如何使用KNN

导入文件和库 加载数据集、拆分数据集 训练模型 预测 打印结果

用C#调用SAP 的WebServices接口

文章目录 用C#调用SAP 的WebServices接口创建C#的项目添加窗体添加引用在表单的装载事件里编写代码运行结果SAP的RFC函数 用C#调用SAP 的WebServices接口 创建C#的项目 添加窗体 添加引用 在表单的装载事件里编写代码 using System; using System.Collections.Generic; using …

MicroLED:苹果对知识产权的影响

Yole的洞察揭示&#xff0c;MicroLED IP在经历了七年的爆炸式增长后&#xff0c;已然屹立于行业之巅。苹果公司&#xff0c;作为微LED领域的先行者&#xff0c;早在2014年便敏锐地捕捉到Luxvue这家初创公司的潜力&#xff0c;将其纳入麾下&#xff0c;引发了业界的广泛关注。然…

204页 | MES项目需求案例方案:效率+精细化+品质+数据互联(免费下载)

【1】关注本公众号&#xff0c;转发当前文章到微信朋友圈 【2】私信发送 MES项目需求案例方案 【3】获取本方案PDF下载链接&#xff0c;直接下载即可。 如需下载本方案PPT/WORD原格式&#xff0c;请加入微信扫描以下方案驿站知识星球&#xff0c;获取上万份PPT/WORD解决方案&…

上位机图像处理和嵌入式模块部署(f103 mcu运行freertos)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 mcu一般有两个用途,一个是控制,一个是非控制。控制类的应用一般要求实时性比较高,什么时候做什么,都是有严格的时间要求的。而非控制类的应用,则要求实现尽可能多的功能,比如…

如何调用通义千问大模型API

目录 登录阿里云 大模型服务平台百炼 登录控制台 QWen Long QWen 通义千问开源系列 大语言模型 OpenAI接口兼容 登录阿里云 阿里云-计算&#xff0c;为了无法计算的价值 大模型服务平台百炼 降价信息&#xff1a; 登录控制台 右上角取得API key 创建Key QWen Long qw…

03.tomcat环境搭建

上传软件包 JDK #man bash #PATH 存放命令的路径 ## ls #加入环境变量&#xff0c;注意&#xff1a;EOF的单引号的意思就是追加到文件中的内容带有变量的不做解析&#xff0c;否则会被解析 cat >>/etc/profile <<EOF export JAVA_HOME/application/jdk export PAT…

修改元组元素

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 场景模拟&#xff1a;伊米咖啡馆&#xff0c;由于麝香猫咖啡需求量较大&#xff0c;库存不足&#xff0c;店长想把它换成拿铁咖啡。 实例08 将麝香猫…

Python 开心消消乐

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

硬盘录像机DVR如何连接到外网的视频监控接入网关(国标网关)

目录 一、要求 二、工作准备 三、接入 1、查看SIP服务器ID号和相关国标对接参数&#xff0c;如下&#xff1a; 2、DVR国标参数配置 3、进行连接 &#xff08;1&#xff09;设备接入 &#xff08;2&#xff09;配置通道 &#xff08;3&#xff09;通道接入 &#xff0…

蓝桥杯算法心得——李白打酒(加强版)

大家好&#xff0c;我是晴天学长&#xff0c;记忆化搜索&#xff0c;找到技巧非常重要&#xff0c;需要的小伙伴可以关注支持一下哦&#xff01;后续会继续更新的。&#x1f4aa;&#x1f4aa;&#x1f4aa; 2) .算法思路 1.memo三维表示记录的结果 3&#xff09;.算法步骤 1…

[ FreeRTOS 基础知识] RTOS 背景介绍

文章目录 RTOS简介IOTOSFreertos简介RTOS划分 RTOS简介 &#xff08;1&#xff09;实时操作系统&#xff0c;本用于追求实时性的嵌入式系统。 典型&#xff1a;ucos、uclinux、vxworks &#xff08;实时性的指当事件产生的时候&#xff0c;需要花多久的时间做出响应。&#xf…

俄罗斯半导体领域迈出坚实步伐:首台光刻机诞生,目标直指7纳米工艺

近日&#xff0c;国外媒体纷纷报道&#xff0c;俄罗斯在半导体技术领域取得了重要突破&#xff0c;首台光刻机已经制造完成并正在进行严格的测试阶段。这一里程碑式的事件标志着俄罗斯在自主发展半导体技术的道路上迈出了坚实的一步。 据俄罗斯联邦工业和贸易部副部长瓦西里-什…