Spring Boot 日志处理

2023-11-05

Spring Boot 日志处理

Spring Boot 是一个非常流行的 Java 开发框架,它提供了简洁的配置和强大的开发工具。日志是应用程序中必不可少的一部分,因为它可以帮助开发人员进行调试和故障排除。Spring Boot 提供了多种日志框架,本文将重点介绍如何使用 Spring Boot 处理日志。

img

Spring Boot 默认日志框架

Spring Boot 默认使用 Logback 作为日志框架,这是一个灵活的、高效的、可扩展的日志框架。Logback 支持多种日志级别,包括 TRACE、DEBUG、INFO、WARN 和 ERROR。默认情况下,Spring Boot 将日志级别设置为 INFO。

Spring Boot 使用 Logback 的默认配置文件 logback-spring.xml,这个文件位于 src/main/resources 目录下。默认配置文件的内容如下:

<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <springProfile name="dev">
        <logger name="com.example" level="DEBUG"/>
    </springProfile>
</figuration>

这个配置文件包含了一个 include 元素,它引用了 Spring Boot 的默认配置文件 base.xmlspringProfile 元素用于指定不同的配置文件,这里的 dev 表示开发环境。在 dev 环境中,logger 元素指定了一个名为 com.example 的日志记录器,日志级别为 DEBUG。这个配置文件的作用是输出 com.example 包下的 DEBUG 级别日志。

日志输出格式

Logback 支持多种日志输出格式,包括默认格式和自定义格式。默认格式包含时间戳、日志级别、类名、方法名和日志信息。可以使用 %d%level%logger%method%msg 等占位符来定义日志输出格式。例如,下面的配置将日志输出格式设置为时间戳、日志级别、类名、方法名和日志信息:

<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <springProfile name="dev">
        <logger name="com.example" level="DEBUG"/>
    </springProfile>

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

    <root level="INFO">
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

这个配置中,定义了一个名为 CONSOLE 的控制台输出器,它使用了一个自定义的输出格式。输出格式中使用了 %d 表示时间戳、%thread 表示线程名、%level 表示日志级别、%logger{36} 表示类名、%msg 表示日志信息。%n 表示换行符。这个输出格式会输出类似于下面的日志:

2023-05-23 12:30:45.123 [main] INFO  com.example.App - Application started successfully.

日志级别

Logback 支持多种日志级别,包括 TRACE、DEBUG、INFO、WARN 和 ERROR。默认情况下,Spring Boot 将日志级别设置为 INFO,这意味着 TRACE 和 DEBUG 级别的日志将不会输出。可以在配置文件中使用 logger 元素来设置不同包下的日志级别,例如:

<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <springProfile name="dev">
        <logger name="com.example" level="DEBUG"/>
    </springProfile>

    <root level="INFO">
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

这个配置文件中,logger 元素设置了 com.example 包下的日志级别为 DEBUG,这意味着这个包下的 TRACE、DEBUG、INFO、WARN 和 ERROR 级别的日志都会输出。root 元素指定了默认的日志级别为 INFO,这意味着除了 com.example 包下的日志之外,其他包下的 TRACE 和 DEBUG 级别的日志都不会输出。

日志文件

除了输出到控制台,Logback 还可以将日志输出到文件中。可以使用 RollingFileAppender 来实现日志文件的滚动。

<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <springProfile name="dev">
        <logger name="com.example" level="DEBUG"/>
    </springProfile>

    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOG_PATH}/app.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_PATH}/app.%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="INFO">
        <appender-ref ref="FILE" />
    </root>
</configuration>

这个配置文件中,定义了一个名为 FILE 的日志文件输出器。file 元素指定了日志文件的路径和名称,rollingPolicy 元素指定了日志文件的滚动策略,这里使用了基于时间的滚动策略,每天一个日志文件,最多保留 30 天的日志文件。encoder 元素同样定义了输出格式。在这个配置文件中,日志将输出到 ${LOG_PATH}/app.log 文件中,${LOG_PATH} 是一个占位符,它会被替换成实际的日志文件路径。如果想要在生产环境中使用日志文件,可以将 ${LOG_PATH} 替换成实际的日志文件路径。

使用其他日志框架

除了 Logback,Spring Boot 还支持多种其他的日志框架,包括 Log4j2 和 JDK Logging。可以在 pom.xml 文件中添加相应的依赖来使用其他日志框架。例如,如果想要使用 Log4j2,可以添加以下依赖:

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

添加依赖之后,需要在配置文件中配置相应的日志框架。例如,如果想要使用 Log4j2,可以添加以下配置:

<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <springProfile name="dev">
        <logger name="com.example" level="DEBUG"/>
    </springProfile>

    <appender name="CONSOLE" class="org.apache.logging.log4j.core.appender.ConsoleAppender">
        <layout>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </layout>
    </appender>

    <root level="INFO">
        <appender-ref ref="CONSOLE" />
    </root>
</configuration>

这个配置文件中,使用了 Log4j2 的控制台输出器。与 Logback 不同的是,Log4j2 使用了 <layout> 元素来定义输出格式。其他的配置与 Logback 类似。

总结

日志是应用程序中必不可少的一部分,它可以帮助开发人员进行调试和故障排除。Spring Boot 提供了多种日志框架,包括 Logback、Log4j2 和 JDK Logging。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring Boot 日志处理 的相关文章

  • 为什么 Hashtable 不允许空键或空值?

    正如 JDK 文档中所指定的 Hashtable 不允许空键或空值 HashMap 允许一个空键和任意数量的空值 为什么是这样 Hashtable 是较旧的类 通常不鼓励使用它 也许他们看到了对 null 键的需要 更重要的是 null 值
  • 在Java Servlet中获取通过jquery ajax发送的参数[重复]

    这个问题在这里已经有答案了 我在网上搜索这个主题 但找不到有效的示例 我会很高兴有人能给我帮助 这就是我测试的 ajax url GetJson type POST dataType json contentType application
  • 从 Android 函数更新 Textview

    有人可以告诉我如何从函数更新 Android Textview 控件吗 我在互联网上进行了深入搜索 看到很多人都问同样的问题 我测试了线程但无法工作 有人有一个简单的工作示例吗 例如 调用一个函数 在循环中运行多次 并且该函数在 TextV
  • ZeroDateTimeBehavior=convertToNull 在使用 hibernate 的 jdbc url 中不起作用

    通过 extern 属性文件 url 指定如下 jdbc mariadb xxxxx 3306 xxxxx zeroDateTimeBehavior convertToNull 连接工作正常并且能够查询数据库 通过休眠 我创建了一个映射到带
  • JAX-WS 入门 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 有人可以推荐一些关于 JAX WS 入门的好教程吗 使用各种工具 如 wsgen 等 您可以从这里开始 通过 Java SE 6 平台介绍
  • Android 信号 11 (SIGSEGV),代码 1 (SEGV_MAPERR) libwebviewchromium.so

    对于 android 4 4 我多次收到 Native crash at system lib libwebviewchromium so 错误 以下是设备包括 Xperia Z1 SO 01F 16 30 2 Galaxy Tab4 7
  • 清空变量不会使方法引用无效[重复]

    这个问题在这里已经有答案了 为什么代码不抛出NullPointerException当我使用与变量绑定的方法引用时dog我后来分配了null to 我正在使用 Java 8 import java util function Functio
  • 是否可以创建 Java RAM 磁盘以与 java.io.* API 一起使用?

    我正在使用一个第三方库 它基本上创建一个输出目录 其中包含不同类型的文件和子目录 我希望能够编写单元测试来确认输出正确 我希望能够将库与 RAM 磁盘一起使用 这样库所做的任何事情都不会以任何方式接触实际的磁盘板 这个想法是让测试运行和清理
  • 扩展多个类

    我知道 Java 不支持多重继承 因为不允许扩展多个类 我只是想知道我的问题是否有解决方法 我有一个名为CustomAction需要扩展两个抽象类 BaseAction and QuoteBaseAction 我无法更改这些抽象类中的任何一
  • 为 REST API 生成 Swagger UI 文档

    我使用 Java 中的 JAX RS Jersey 开发了 REST API 我想为其转换 生成基于 Swagger 的 UI 文档 谁能以简单的方式告诉我如何做到这一点的精确 步骤 很抱歉 他们网站上给出的步骤对我来说有点模糊 有多种方法
  • 获取接收者的设备令牌以在 Firebase 中发送通知

    所以我正在学习如何使用 firebase 发送设备到设备的通知 我看到了这个answer https stackoverflow com a 42548586 5237289发送通知 看起来很简单 现在 我知道要获取发件人的令牌 它应该如下
  • Hybris:如何在impex中导入zip文件中的媒体?

    我知道我们可以导入未像这样压缩的图像 siteResource jar com project initialdata constants ProjectInitialDataConstants projectinitialdata imp
  • 在 Kotlin 中声明静态属性?

    My Java code public class Common public static ModelPengguna currentModelPengguna public class Common companion object v
  • 添加 char 和 int

    据我了解 字符是一个字符 即一个字母 一个digit 标点符号 制表符 空格或类似的东西 因此 当我这样做时 char c 1 System out println c 输出 1 正是我所期望的 那么为什么当我这样做时 int a 1 ch
  • 如何使用 AffineTransform.quadrantRotate 旋转位图?

    我想旋转一个bitmap关于它的中心点 然后将其绘制成更大的图形上下文 位图是40x40 pixels 图形上下文是500x500 pixels 这就是我正在做的 BufferedImage bi new BufferedImage 500
  • 如何在一次操作中使用 Thymeleaf 检查 null 和空条件?

    有什么方法可以检查 Thymeleaf 中的 null 和empty 条件吗 方法一 1 variable1 variable2 variable3 2 variable null 3 variable 如果我们结合两个条件 例如 vari
  • 为什么/何时应该使用泛型方法?

    学习Java的时候遇到过通用方法 public
  • 使用 Hibernate Envers 的复合表

    我有一个带有复合表的应用程序 其中包含一个额外的列 一切正常 直到我们添加 Hibernate Envers Audited org hibernate MappingException 无法读取 no pack response Resp
  • FragmentMap + ActionBar 选项卡

    我一直在尝试插入一个MapView进入一个ActionBar Tab 但我什至无法解决问题 即使谷歌搜索 这是主要活动 Override public void onCreate Bundle savedInstanceState supe
  • MyBatis 枚举的使用

    我知道以前有人问过这个问题 但我无法根据迄今为止找到的信息实施解决方案 所以也许有人可以向我解释一下 我有一个表 状态 它有两列 id 和 name id是PK 我不想使用 POJO Status 而是使用枚举 我创建了这样一个枚举 如下所

随机推荐

  • Snipaste 使用方法

    下载 Snipaste 下载完成后 解压文件如图 双击Snipaste exe后 可以看到状态栏中有 右键图标可以看到详细配置信息 按需配置即可 截图之后点击下图红框图钉可以钉住截图区域
  • python 笔记:PyTrack(将GPS数据和OpenStreetMap数据进行整合)【官网例子解读】

    论文笔记 PyTrack A Map Matching Based Python Toolbox for Vehicle Trajectory Reconstruction UQI LIUWJ的博客 CSDN博客4 0 包的安装 官网的两种
  • JavaWeb实现查询功能

    写在前面 你们好 我是小庄 很高兴能和你们一起学习JavaWeb 如果您对Java感兴趣的话可关注我的动态 写博文是一种习惯 在这过程中能够梳理知识和巩固知识点 需求 当搜索框为空时 查询数据库所有商品 输入商品名时 进行模糊查询 实现思路
  • SpringBoot JPA 中无法注入 JpaRepository 接口的问题及解决方案

    错误 No qualifying bean of type xxx xxx xxx available expected at least 1 bean which qualifies as autowire candidate Depen
  • C语言输出100以内的全部素数。

    include
  • matlab练习程序(灰度、二值图像腐蚀膨胀)

    cl img gray imread fupeng jpg img erzhi imread erzhi fupeng jpg imshow img gray figure imshow img erzhi m n size img gra
  • 文件目录大小

    题目描述 一个文件目录的数据格式为 目录id 本目录中文件大小 子目录id列表 其中目录id全局唯一 取值范围 1 200 本目录中文件大小范围 1 1000 子目录id列表个数 0 10 例如 1 20 2 3 表示目录1中文件总大小是2
  • 解决 vba 报错:要在64位系统上使用,请检查并更新Declare 语句

    将错误处的 Declare 替换成 Declare PtrSafe 即可
  • java正则

    一 Pattern类和Matcher类 java util regex是一个用正则表达式所订制的模式来对字符串进行匹配工作的类库包 它包括两个类 Pattern和Matcher Pattern 一个Pattern是一个正则表达式经编译后的表
  • docker 安装向量数据库 Milvus

    Miluvs 官网为 www milvus io Milvus 向量数据库能够帮助用户轻松应对海量非结构化数据 图片 视频 语音 文本 检索 单节点 Milvus 可以在秒内完成十亿级的向量搜索 请参考 在线教程 分布式架构亦能满足用户的水
  • LSTM模型预测新冠

    LSTM是RNN的改进型 传统RNN模型会随着时间区间的增长 对早期的因素的权重越来越低 有可能会损失重要数据 而LSTM模型通过遗忘门 输入门 输出门三个逻辑 来筛选和保留数据 原理详解可以参考如何从RNN起步 一步一步通俗理解LSTM这
  • (二叉)树的遍历

    树 包括图 在遍历时都存在两种方式 深度优先遍历和广度优先遍历 树 一定有一个根节点 而图 没有根节点 但图中的任意节点都可以作为根节点使用 当然该节点一定要有边 否则没有意义 深度优先遍历 访问当前节点 将当前节点的children作为子
  • spacemacs删除行尾无意义的空格符号

    SPC SPC delete trailing whitespace 或者 SPC x d w
  • 2019年全球安全态度调查:越来越多的受害者向勒索软件支付赎金

    根据网络安全公司CrowdStrike 发布的 2019年全球安全态度调查 的数据 在供应链攻击后 危害黑客以支付赎金的组织总数从14 增长到39 与去年同期相比翻了一番 其中最典型的是英国 2019年 遭受勒索软件攻击并支付勒索赎金的组织
  • fastadmin public js 内 selectpage 联动下拉

    js 页面 define jquery bootstrap backend table form selectpage function undefined Backend Table Form var Controller index f
  • 如何使用Git工具克隆GitHub仓库到本地

    首先 确保你已经在本地安装了Git 如果没有安装 可以前往Git官方网站 https git scm com 下载并安装适合你操作系统的版本 在本地文件夹打开Git Bash 如果你使用Windows系统 在GitHub上找到你想要克隆的仓
  • UE Cook遇到的一些问题

    UE Cook是什么 简单来说 把UE资源 比如uasset umap等转换成平台能识别的资源类型 Cook中遇到的报错 找不到文件 说明你有些plugin没有加入到当前 Project uproject中去 UATHelper Cooki
  • 35岁,一个团队leader,从工作满8年的公司离职,选择重新尝试新机会,或许35岁才是起点。

    目录 面试 1 年龄大找工作一定要有目标 不能太随便 2 代码能力是整个IT行业的核心技能 也是对整个行业从业者的要求 3 沟通表达很重要 把自己做过的事情做到极致 然后能讲出来 4 心态要好 5 机会总是留给有准备的人 勿浮躁 先沉淀 厚
  • 多态语法c++(自学笔记一)

    多态中的纯虚函数 使用多态时 当子类继承父类之后 一般来说对于父类只是作为提供相应的成员变量和成员函数的一个集合 在实际项目中 如果想要修改某一部分的功能 按照以往普通的类的写法 就需要修改类中的代码 也可以说是源码 这样会显得很不方便和不
  • Spring Boot 日志处理

    Spring Boot 日志处理 Spring Boot 是一个非常流行的 Java 开发框架 它提供了简洁的配置和强大的开发工具 日志是应用程序中必不可少的一部分 因为它可以帮助开发人员进行调试和故障排除 Spring Boot 提供了多