在 Spring Boot中配置日志

news2024/10/7 11:20:49

Spring Boot 在引擎盖下使用Apache Commons Logging。但是,它允许您选择所需的日志记录库。让我们来看看使用 Spring Boot 时的一些配置和最佳实践。

目录

  • 概述
  • 简单日志记录示例
  • 配置日志记录
    • 更改日志级别
    • 将日志写入文件
    • 在 Spring 引导中更改日志记录模式
  • 对日志条目进行颜色编码
  • 自定义日志记录配置文件
  • Log4j2 用于 Spring 引导日志记录
  • 总结
  • 相关

概述

默认情况下,如果使用启动器,则应用程序将使用Logback进行日志记录。该框架还提供各种日志路由,以确保其他日志记录库开箱即用。这样,您可以将 Logback 与 Log4j2 或 JUL 交换。

在进一步讨论之前,有许多用于Java的日志记录框架。在大多数情况下,您不需要在 Spring 引导中更改日志记录依赖项。

简单日志记录示例

让我们使用示例控制器演示 spring-boot 中的日志记录。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;


@Controller
public class TestController {

  private static final Logger log = LoggerFactory.getLogger(TestController.class);

  @RequestMapping("/test")
  @ResponseBody
  String hello(@RequestParam("name") String name) {
    log.trace("Hello {}", name);
    log.debug("Hello {}", name);
    log.info("Hello {}", name);
    log.warn("Hello {}", name);
    log.error("Hello {}", name);
    return "Hello";
  }
}

使用上述控制器,如果您点击http://localhost:8080/test?name=John Doe,那么您将在控制台输出中看到一些日志。就是这样,您已经在项目中成功使用了日志记录。

最好的部分是,您没有配置任何内容。

配置日志记录

Spring 引导带有一些用于日志记录的默认配置。例如,它开箱即用地打印到控制台,它具有详细的消息日志模式,我们将详细查看,最后,它仅打印具有 INFO 或更高版本的日志级别。

让我们看看如何覆盖这些行为。

更改日志级别

如果您已经看到了上一节中的示例,则日志将仅包含 INFO 或更高版本的打印条目。但是,如果您希望覆盖此行为,则 Spring boot 允许您根据类和包配置日志记录级别。

例如,您可以为TestController启用跟踪日志,如下所示。

 

logging.level.com.springhow.examples.logging.controllers.TestController=TRACE

如果您希望为包下的所有类启用调试日志,则可以像下面这样操作。

 

logging.level.com.springhow.examples.logging.controllers=DEBUG

您还可以将不同的包和类分组到组中。例如,可以将与 API 相关的所有包列出到记录器组中。然后,您可以为其指定日志记录级别。

 

#Define a group logging.group.api=com.springhow.web,com.springhow.services,com.springhow.domain #Specify a logging level for that group logging.level.api=DEBUG

使用此方法,您无需定义三个单独的日志记录级别。此外,它使配置文件看起来干净。

为了方便起见,Spring boot 提供了Websql以及日志记录组,以便我们可以轻松地配置它们以进行调试。

将日志写入文件

默认情况下,Spring 引导将所有日志打印到控制台。但是,通过以下配置,您也可以启用基于文件的日志记录。例如,以下配置在当前工作目录中创建一个日志文件。

 

logging.file.name=springhow.log

您还可以为文件名提供完整路径

 

logging.file.name=/var/log/springhow.log

或者,您可以提供日志记录文件路径。

 

logging.file.path=/var/log/

使用“logging.file.path”的唯一例外是 Spring boot 将在给定路径下创建一个名为 “spring.log” 的日志文件。

对于WINDOWS,所有绝对路径都从C:\drive 转换。因此,“/var/log/”变为“c:\var\log\”。

最重要的是,如果您同时使用 logging.file.name和logging.file.path,则logging.file.name将优先。

在 Spring 引导中更改日志记录模式

Spring Boot 的默认记录器格式/模式如下所示。

对于许多人来说,这种充满活力的伐木模式绰绰有余。但是,如果您希望更改此日志模式,则可以使用“logging.pattern.console”和“logging.pattern.file”属性。

在下面的示例中,我们可以看到覆盖日志格式是多么容易。

 

logging.pattern.console=%p %d{yyyy-MM-dd HH:mm:ss.SSS} : [%t] %-40.40logger{39} : %m%n

如图所示,日志级别位于行首,不再有鲜艳的颜色。有关详细信息,请查看登录模式文档。

对日志条目进行颜色编码

在支持 ANSI 颜色的环境中,您可以使用可以使用不同颜色的不同日志组件的模式。例如,可以使用 %clr(%p) 通过日志记录级别来设置颜色。此处,%p 表示日志记录级别。

在这里,所有的颜色映射都由弹簧启动提供。如果您希望为日志组件指定颜色,也可以这样做。

 

logging.pattern.console=%clr(%p) %d{yyyy-MM-dd HH:mm:ss.SSS} : [%t] %clr(%-40.40logger{39}){red} : %m%n

上述配置的结果是,

logging.pattern.file设置颜色编码是没有意义的,因为文件不会转换 ANSI 颜色编码。所以你会看到一堆胡言乱语。

自定义日志记录配置文件

所有这些默认行为都是可能的,因为 Spring 引导附带了默认的日志记录配置文件。它还为我们提供了在某种程度上配置这些配置的方法。

但是,如果您希望使用更野蛮的配置,那么您也可以提供自己的配置。只需在src/main/resources/下提供一个logback.xmllogback-spring.xml您就可以开始了。

<configuration>
  <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <!-- encoders are assigned the type
         ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
    <encoder>
      <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
  </appender>

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

请注意,一旦您添加 logback.xml,就无法通过application.properties 自定义日志记录。

您还可以使用“logging.config”属性从外部位置加载日志记录配置。

 

logging.config=/etc/myapp/logback.xml

使用自定义配置,您几乎可以执行上述所有自定义。但唯一的问题是,您无法轻松地将 Spring 启动应用程序切换到不同的日志记录系统。例如,如果要切换到 Log4j2,则需要为该特定系统重新创建配置。

Log4j2 用于 Spring 引导日志记录

如果您没有自定义配置,那么在 Spring 启动中更改日志记录系统非常简单。例如,您可以通过使用 spring-boot-starter-log4j2 删除默认的spring-boot-starter-logging来交换到Log4J2

日志记录启动器是核心启动器(弹簧启动启动器)的一部分。因此,您可以安全地从那里删除日志记录启动器。

 
<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>

即使您有许多不同的启动器,例如“web”,“jpa”等,它们现在都将排除用于日志记录的启动器,并将使用log4j2中的配置。最好的部分是,您不必更改 application.properties( 如果您尚未指定与 logback 相关的任何内容)。

总结

到目前为止,我们学习了 Spring 引导中的日志记录如何工作,如何配置它们,以及如何在 Spring 引导应用程序中用 log4j2 替换 logback。

  • Apache Commons Logging – 解释
  • 在 Spring 引导中添加 Servlet 过滤器的方法
  • 在 Spring 引导中显示来自 Spring Data JPA/hibernate 的 SQL
  • 春季启动横幅 – 完整指南
  • Spring 框架中的 Setter 依赖注入

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

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

相关文章

基于小波域的隐马尔可夫树模型的图像去噪方法的matlab实现代码

目录 1.算法概述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法概述 为适应图像的空域非平稳变化, 提出了一种基于小波域分类隐马尔可夫树(CHMT)模型的图像去噪方法.该模型中,图像在每一尺度每一子带的小波系数均被分成C组以突出其空域非平稳变化 的特征,这…

MySQL有哪些锁

这次&#xff0c;来说说 MySQL 的锁&#xff0c;主要是 Q&A 的形式&#xff0c;看起来会比较轻松。 在 MySQL 里&#xff0c;根据加锁的范围&#xff0c;可以分为全局锁、表级锁和行锁三类。 全局锁 全局锁是怎么用的&#xff1f; 要使用全局锁&#xff0c;则要执行这条命…

彻底搞明白概率论:事件间的关系与运算;频率与概率

文章目录事件间的关系事件间的运算事件间的运算法则概率描述性定义统计性定义频率频率的性质频率是否能够作为概率呢&#xff1f;公理化定义概率的重要性质事件间的关系 注意互斥关系和对立关系&#xff1a; 互斥关系是&#xff1a;只要 A,BA,BA,B 不同时发生&#xff08;不存在…

山东菏泽家乡网页代码 html静态网页设计制作 dw静态网页成品模板素材网页 web前端网页设计与制作 div静态网页设计

家乡旅游景点网页作业制作 网页代码运用了DIV盒子的使用方法&#xff0c;如盒子的嵌套、浮动、margin、border、background等属性的使用&#xff0c;外部大盒子设定居中&#xff0c;内部左中右布局&#xff0c;下方横向浮动排列&#xff0c;大学学习的前端知识点和布局方式都有…

MindFusion JavaScript R2 套件 Crack

MindFusion JavaScript R2将您的 JAVASCRIPT 应用程序更快地推向市场 MindFusion JavaScript 库旨在显着缩短开发任何类型的交互式 JS 应用程序所需的时间。它们还使开发更加容易。 用于 JavaScript 的 MindFusion 包 JavaScript 数据视图 数据网格JavaScript 图 绘图JavaScr…

DJYGUI系列文章八:GDD绘图系统

目录 1 GDD绘图系统概述 1.1绘图上下文 1.2 DrawColor&#xff0c;FillColor&#xff0c;TextColor的作用与区别 2 API说明 2.1 SetRopCode&#xff1a; 设置当前光栅码 2.2 GetRopCode&#xff1a; 获得当前光栅码 2.3 MoveTo&#xff1a; 设置当前坐标位置 2.4 SetDr…

Web基础习题

1.语义化标签 1.现需要设置一个按钮&#xff0c;请填写语义化标签补全代码片段&#xff08;仅填写一个标签名即可&#xff09; <_____>点我!</_____> 2.在HTML中一般用哪个语义化标签表示斜体文本效果 3.在HTML中一般用哪个语义化标签表示头部导航 4.在HTML中一…

web前端-html-css-字体(字体的样式,字体的分类,字体其他样式,字体简写样式,文本样式)

字体的样式 <!DOCTYPE html> <html><head><meta charset"utf-8" /><title></title><style type"text/css">.p1 {font-size: 30px;font-family: "curlz mt";}</style></head><body>…

vite+ts前期准备(尽量详细在更新)

创建和准备vitets项目 打开命令行或进入vscode打开终端 输入命令:npm init vite 选择vuets cd 进入项目 cnpm/yarn/npm install 初次运行项目 终端输入命令:cnpm run dev 可以设置运行之后自动打开浏览器 目录打开package.json dev:vite --open 添加–open 查看环境变量 目录打…

Latex IEEE模板导入中文问题

IEEE模板下载 下载IEEE的conference的latex模板文件&#xff1a; conference&#xff1a;https://www.ieee.org/conferences/publishing/templates.html 模板包括以下文件 编译 IEEE模板需要用pdflatex编译&#xff0c;否则英文的粗体等无法正常显示。 使用pdflatex编译 …

select......for update会锁表还是锁行?

select查询语句是不会加锁的&#xff0c;但是select .......for update除了有查询的作用外&#xff0c;还会加锁呢&#xff0c;而且它是悲观锁。 那么它加的是行锁还是表锁&#xff0c;这就要看是不是用了索引/主键。 没用索引/主键的话就是表锁&#xff0c;否则就是是行锁。…

Flutter组件--TabBar使用详情(分段控制器)

TabBar介绍 一个显示水平行选项卡的Widget。 通常创建为 AppBar 的 AppBar.bottom 部分并与 TabBarView 结合使用 在什么情况下使用TabBar 当你的app内容类别比较多的时候&#xff0c;我们常常会用到TabBar&#xff0c;例如网易新闻、京东、B站等&#xff0c;所以TabBar是一…

CentOS7 设置 MySQL 主备同步

文章目录环境准备修改配置文件创建同步数据账户设置主库信息测试参考资料本文主要介绍在 MySQL 的主备同步设置方法。环境准备 Linux&#xff1a;Centos 7 MySQL&#xff1a;5.7 主节点&#xff1a;192.168.210.18 备节点&#xff1a;192.168.210.19 主备节点 MySQL 均支持…

2022 Android 高级进阶学习资料与高频精选面试题精讲(圆梦大厂)

序言 可能每个技术人都有个大厂梦&#xff0c;我也不例外。最近准备跳槽&#xff0c;前一阵子在准备各种面试&#xff0c;也面了几个大厂&#xff0c;其中包括字节、阿里 就以字节面试为例&#xff0c;面试总共花费了 20 天左右&#xff0c;包含了 4 轮电话面试、1 轮笔试、1 轮…

锐捷OSPF基础实验配置

目录 配置基础的邻居建立 配置Area4的虚链路 配置OSPF特殊区域 配置路由重分发 配置OSPF汇总 下发缺省路由 配置OSPF邻居认证 配置OSPF的网络类型 配置基础的邻居建立 以R1和R2建立邻居为例子&#xff08;其余设备邻居建立配置相同&#xff09; R1配置 int g0/0 no swi…

安泰测试-矢量网络分析仪有哪些应用?

网络分析仪可用于表征射频(RF)器件。尽管最初只是测量 S 参数&#xff0c;但为了优于被测器件&#xff0c;现在的网络分析仪已经高度集成&#xff0c;并且非常先进。 射频电路需要独特的测试方法。在高频内很难直接测量电压和电流&#xff0c;因此在测量高频器件时&#xff0c…

电话语音控件:AddTapi.NET 6.0 Crack

关于 AddTapi.NET 轻松地将电话 (TAPI) 功能添加到您的 C#、VB.NET 或 C 应用程序。 AddTapi.NET 支持 Microsoft 电话应用程序编程接口 (TAPI) 1.3 - 3.1&#xff0c;并适用于所有与 TAPI 兼容的电话硬件&#xff0c;从语音调制解调器到高级电话板再到与 TAPI 兼容的 PBX 系统…

2.9 Python 流程控制

文章目录1. 流程控制2. 顺序结构3. 伪代码4. 流程图4.1 顺序结构4.2 分支结构4.3 多分支结构4.4 循环结构1. 流程控制 流程控制: 控制程序按照一定的结构进行执行. 流程控制指的是代码的运行逻辑, 分支走向, 循环控制, 能真正体现程序执行顺序的操作.* 1966年计算机科学家 C.B…

pikachu---暴力破解(burpsuite)

没有设置认证策略的情况下&#xff0c;口令猜测就是尝试&#xff0c;永无尽头的尝试 符号的排列组合试到最后&#xff0c;总能得出最终结果&#xff0c;人类大脑和生理的限制&#xff0c;需要使用工具来尝试。 前言 浅学&#xff0c;借鉴&#xff0c;暂无代码分析。 基于表…

中职生学习动机的激发与培养研究-以汽车运用与维修专业为例

目 录 摘 要 I Abstract II 一、绪论 1 &#xff08;一&#xff09;选题背景及意义 1 &#xff08;二&#xff09;国内外研究现状 1 1.国外发展现状及趋势 1 2.国内发展现状及趋势 3 &#xff08;三&#xff09;研究思路及方法 3 二、学习动机的含义及基本类型 5 &#xff08;一…