Spring Boot 如何使用 JUL 进行日志记录

news2024/9/20 16:36:56

Spring Boot 如何使用 JUL 进行日志记录

在 Spring Boot 中,我们可以使用多种日志框架进行日志记录。其中,JUL (Java Util Logging) 是 Java 平台自带的日志框架,它提供了简单的 API 和配置,可以轻松地进行日志记录。本文将介绍如何在 Spring Boot 中使用 JUL 进行日志记录,并提供示例代码。

在这里插入图片描述

配置 JUL

默认情况下,Spring Boot 使用 Logback 作为其日志框架。如果想要使用 JUL 进行日志记录,需要进行一些配置。首先,我们需要在 pom.xml 文件中添加以下依赖:

<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-jetty</artifactId>
</dependency>
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>jul-to-slf4j</artifactId>
  <version>1.7.30</version>
</dependency>

在上面的依赖中,我们排除了默认的日志框架依赖 spring-boot-starter-logging,并添加了 Jetty 服务器的依赖。此外,我们还添加了 jul-to-slf4j 的依赖,它将 JUL 日志记录器转换为 SLF4J 日志记录器,方便在 Spring Boot 中使用。

接下来,我们需要在 application.properties 文件中添加以下配置:

logging.level.root=INFO
logging.level.org.springframework=INFO
logging.level.org.hibernate=INFO
logging.level.com.example=FINEST
logging.config=classpath:logging.properties

在上面的配置中,我们指定了日志级别和日志配置文件的位置。logging.level.root 表示根记录器的日志级别,logging.level.org.springframework 表示 Spring 框架的日志级别,logging.level.org.hibernate 表示 Hibernate 框架的日志级别,logging.level.com.example 表示我们自己的应用程序的日志级别。在这里,我们将自己的应用程序的日志级别设置为 FINEST,表示记录最详细的日志。logging.config 表示日志配置文件的位置,我们将其设置为 classpath:logging.properties

接下来,我们需要创建一个名为 logging.properties 的文件,用于配置 JUL。在该文件中,我们可以配置 JUL 的日志级别、输出目标、格式化器和过滤器等选项。以下是一个简单的示例:

handlers=java.util.logging.ConsoleHandler
.level=FINEST
java.util.logging.ConsoleHandler.level=FINEST
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter

在上面的配置中,我们指定了日志级别、输出目标和格式化器。handlers 指定了输出目标,这里我们将日志输出到控制台。.level 表示根记录器的日志级别,java.util.logging.ConsoleHandler.level 表示控制台输出目标的日志级别,java.util.logging.ConsoleHandler.formatter 表示控制台输出目标的格式化器,这里我们使用了 SimpleFormatter

在 Spring Boot 中使用 JUL

在配置好 JUL 后,我们就可以在 Spring Boot 中使用 JUL 进行日志记录了。首先,我们需要在类中创建一个名为 logger 的日志记录器,例如:

private static final Logger logger = Logger.getLogger(DemoController.class.getName());

在上面的代码中,我们使用 Logger.getLogger 方法创建了一个名为 logger 的日志记录器,指定了该记录器所在的类的名称。

接下来,我们可以使用日志记录器记录日志。例如:

logger.info("This is an info message.");

在上面的代码中,我们使用 logger.info 方法记录了一条信息级别的日志。

JUL 支持多种日志级别,包括 SEVEREWARNINGINFOCONFIGFINEFINERFINEST 等级别。可以根据实际需求选择合适的日志级别进行记录。

此外,JUL 还支持使用占位符记录日志,例如:

String message = "Hello, {}!";
String name = "world";
logger.info(message, name);

在上面的代码中,我们使用占位符 {} 表示需要在日志中替换的部分,然后在日志记录方法中传入需要替换的值。这种方式可以避免拼接字符串带来的性能问题,也可以避免因为字符串拼接出错导致的日志输出不正确的问题。

示例代码

下面是一个完整的示例代码,演示如何在 Spring Boot 中使用 JUL 进行日志记录:

import java.util.logging.Logger;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class DemoController {
    
    private static final Logger logger = Logger.getLogger(DemoController.class.getName());
    
    @GetMapping("/hello")
    public String hello() {
        logger.info("This is an info message.");
        String message = "Hello, {}!";
        String name = "world";
        logger.info(message, name);
        return "Hello, world!";
    }
}

在上面的代码中,我们创建了一个名为 DemoController 的 Spring MVC 控制器,其中包含了一个名为 hello 的处理器方法。在该方法中,我们使用了上面介绍的方法记录了两条信息级别的日志,并返回了一个字符串。

总结

在本文中,我们介绍了如何在 Spring Boot 中使用 JUL 进行日志记录,并提供了示例代码。JUL 是 Java 平台自带的日志框架,提供了简单的 API 和配置,可以轻松地进行日志记录。通过配置和使用 JUL,我们可以更加方便地进行日志记录,提高应用程序的可维护性和可靠性。

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

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

相关文章

RocketMQ 常见面试题(一)

RocketMQ Broker 中的消息被消费后会立即删除吗&#xff1f; 不会&#xff0c;每条消息都会持久化到 CommitLog 中&#xff0c;每个 Consumer 连接到 Broker 后会维持消费进度信息&#xff0c;当有消息消费后只是当前Consumer 的消费进度&#xff08;CommitLog 的 offset&…

【计算机视觉】在计算机视觉里,传统卷积已经彻底输给Transformer了吗?

文章目录 一、传统卷积 & Transformer1.1 传统卷积1.2 Transformer 二、知乎高赞回答2.1 作者&#xff1a;知乎用户2.2 作者&#xff1a;王云鹤2.3 作者&#xff1a;知乎用户 一、传统卷积 & Transformer 1.1 传统卷积 传统卷积&#xff08;Traditional Convolution&…

【初识C语言(3)】选择语句+循环语句+函数+数组

文章目录 1. 选择语句2. 循环语句3. 函数4. 数组 C语言是一门结构化的程序设计语言 顺序结构&#xff1b; 选择结构&#xff1b; 循环结构。 1. 选择语句 生活中处处面临着选择&#xff0c;如果你好好学习&#xff0c;校招时拿一个好offer&#xff0c;走上人生巅峰。如果你不学…

案例突破——悲观锁和乐观锁

悲观锁和乐观锁 一、背景介绍二、悲观锁和乐观锁什么是悲观锁什么是乐观锁 三、 在项目中如何使用悲观锁和乐观锁在项目中使用悲观锁实体结构实体对象的xml配置文件对应生成的表结构往表中初始化数据运行之后的结果模拟触发悲观锁的条件核心代码 在项目中使用乐观锁实体结构(添…

【探索 Kubernetes|作业管理 Deployment 篇 系列 12】水平扩展 / 收缩、滚动 / 回滚更新

前言 大家好&#xff0c;我是秋意零。 在上一篇中&#xff0c;我们介绍了控制器的基本设计思想&#xff1a;控制器模式。通过这个 “控制器模式” 我们来看看 Deployment 是如何依靠它来实现的。 最近搞了一个扣扣群&#xff0c;旨在技术交流、博客互助&#xff0c;希望各位…

第40步 深度学习图像识别:DenseNet201建模(Tensorflow)

基于WIN10的64位系统演示 一、写在前面 &#xff08;1&#xff09;DenseNet201 DenseNet201是一种深度卷积神经网络&#xff0c;是DenseNet网络的一种变体。DenseNet&#xff0c;全称Dense Convolutional Network&#xff08;密集卷积网络&#xff09;&#xff0c;是由Faceb…

【VC 7/8】vCenter Server 更新(小版本升级)Ⅱ—— 使用 Shell 命令行更新 vCenter Server

目录 2. 使用 Shell 升级 vCenter Server&#xff08;1&#xff09;下载更新 ISO 镜像&#xff08;2&#xff09;挂载 ISO 镜像&#xff08;3&#xff09;验证 ISO 镜像已被挂载通过VAMI 更新界面将ISO 挂载到 VC 的文件系统 &#xff08;4&#xff09;更新 VC | 安装 vCenter …

Elasticsearch:如何通过 3 个简单步骤从 Elastic 数据中删除个人身份信息

作者&#xff1a;Peter Titov 对于任何组织来说&#xff0c;个人身份信息 (Personally Identifiable information, PII) 合规性都是一个日益严峻的挑战。 无论你是在电子商务、银行、医疗保健还是其他数据敏感的领域&#xff0c;PII 都可能会在无意中被捕获和存储。 拥有结构化…

丰田汽车投资人要求董事长下台

&#x1f699; 丰田电动车推广不力&#xff0c;股东要求董事长下台 Toyota faced down two proxy votes at its annual general meeting. In an unusual challenge to the management of a Japanese company, activist investors in America and Europe recommended voting aga…

跨境电商产品的评价怎么获取?

对于在亚马逊、沃尔玛、eBay、Wish、Newegg、速卖通、阿里国际站、Shopee、Lazada、Temu、乐天、Toktok、Joom、Ozon等跨境电商平台的卖家来说&#xff0c;产品评价和补单&#xff08;增加订单数&#xff09;是一个常见但至关重要的话题 优质的产品评价可以向潜在买家展示我们…

想学习大数据,主要学什么?

什么是大数据 什么是“大数据”呢&#xff1f;如果从字面意思来看&#xff0c;大数据指的是巨量数据。那么可能有人会问&#xff0c;多大量级的数据才叫大数据&#xff1f;不同的机构或学者有不同的理解&#xff0c;难以有一个非常定量的定义&#xff0c;只能说&#xff0c;大…

【技术干货】高精度室内定位方案,影响UWB定位精度的因素分析

物联网时代&#xff0c;室内定位已然成为物联网建设的技术纽带&#xff0c;想要真正发挥位置数据的价值&#xff0c;就需要采集的位置数据有足够精度。基于UWB技术的厘米级UWB高精度室内定位方案已广泛应用于物联网各行业领域的人员定位及资产管理。本篇小编就来带大家了解一下…

QGIS 3D功能操作说明

QGIS可以轻松快速地创建 3D 地图和可视化。可用于3d数据效果浏览及与2D数据的对比及数据的打印输出。具体功能如下。 1.在 QGIS 中&#xff0c;您可以通过几个简单的步骤创建 3D 模型。 (1)在QGIS中添加3D 数据的数据层&#xff0c;例如DEM&#xff0c;以供3D功能使用。 …

快速下载操作系统镜像文件-ubuntu-centos

一键搞定镜像文件下载 操作方式 链接地址&#xff1a;阿里云镜像文件链接地址 点击【OS镜像】弹框中选择相应版本 弹框中选择好相应的发行版本后点击【下载】即可

将数组内的元素变为指定格式的字符串类型numpy.char.mod()方法

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将数组内的每个元素 修改为指定格式的字符串 numpy.char.mod() [太阳]选择题 关于以下代码说法错误的一项是? import numpy as np a np.array([1, 2, 3]) print("【显示】a ",a) p…

前端Vue自定义导航栏菜单 定制左侧导航菜单按钮 中部logo图标 右侧导航菜单按钮

前端Vue自定义导航栏菜单 定制左侧导航菜单按钮 中部logo图标 右侧导航菜单按钮&#xff0c; 下载完整代码请访问uni-app插件市场地址&#xff1a;https://ext.dcloud.net.cn/plugin?id13152 效果图如下&#xff1a; # cc-navHeader #### 使用方法 使用方法 在page.json设…

轻量级的深度学习框架Tinygrad

Tinygrad是一个轻量级的深度学习库&#xff0c;它提供了一种简化和直观的方法来理解和实现神经网络。在本文中&#xff0c;我们将探讨Tinygrad及其主要功能&#xff0c;以及它如何成为那些开始深度学习之旅的人的有价值的工具。 什么是Tinygrad? Tinygrad是一个开源的深度学习…

Redis持久化机制介绍

Redis持久化 1.Redis持久化2.Redis 的持久化机制是什么&#xff1f;各自的优缺点&#xff1f;2.1.RDB&#xff1a;是Redis DataBase缩写快照2.2.AOF&#xff1a;持久化2.3.AOF和RDB优缺点是什么&#xff1f; 3. 如何选择合适的持久化方式4.Redis持久化数据和缓存怎么做扩容&…

[Pytorch]Broadcasting广播机制

文章目录 Broadcasting广播机制BroadcastableBroadcasting Broadcasting广播机制 Broadcasting机制用于在不同维度的张量进行运算时进行维度的自动增加与扩展&#xff0c;Broadcasting机制使用的前提是两个参与运算的张量是可broadcastable的。 Broadcastable 怎样的两个向量…

【libdatachannel】pycharm运行streamer的信令服务及streamer与js客户端联调1

一 信令服务&#xff1a;启动py服务器 ssl必须额外指定 # Usage: ./server.py [[host:]port] [SSL certificate file]文档给出了服务的启动命令&#xff1a; python3 -m http.server --bind 127.0.0.1 8080 直接运行&#xff1a; python的信令服务 #!/usr/bin/env python # # …