SpringBoot中的日志使用

news2024/10/7 12:19:31

SpringBoot的默认使用

观察SpringBoot的Maven依赖图

可以看出来,SpringBoot默认使用的日志系统是使用Slf4j作为门户,logback作为日志实现

编写一个测试代码看是否是这样

@SpringBootTest
class SpringbootLogDemoApplicationTests {
	//使用Slf4j来创建LOGGER对象
	public static final Logger LOGGER = LoggerFactory.getLogger(SpringbootLogDemoApplicationTests.class);

	@Test
	public void test01() throws Exception {
		LOGGER.error("error");
		LOGGER.warn("wring");
		LOGGER.info("info");
		LOGGER.debug("debug");
		LOGGER.trace("trace");

        //使用Log4j来获取Logger对象
		org.apache.logging.log4j.Logger logger = LogManager.getLogger(SpringbootLogDemoApplicationTests.class);
		logger.info("log4j info");
	}
}

运行结果如下 

2023-10-22 17:21:16.307 ERROR 8912 --- [ main] com.zmt.SpringbootLogDemoApplicationTests : error

2023-10-22 17:21:16.308 WARN 8912 --- [ main] com.zmt.SpringbootLogDemoApplicationTests : wring

2023-10-22 17:21:16.313 INFO 8912 --- [ main] com.zmt.SpringbootLogDemoApplicationTests : info

2023-10-22 17:21:16.337 INFO 8912 --- [ main] com.zmt.SpringbootLogDemoApplicationTests : log4j info

可以看到输出格式是一样的,说明即使使用Log4j获取的Logger对象打印日志实际上还是logback来实现日志输出。

SpringBoot的日志配置

我们可以在aplication.properties文件中进行简单的配置

#指定自定义Logger对象的输出日志级别
logging.level.com.zmt = debug

#指定控制台输出消息格式
logging.pattern.console=[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread] ===== %msg%n
#指定日志文件存放的目录,默认文件名为spring.log
logging.file.path=/logs/springboot/
#指定日志文件消息格式
logging.pattern.file=[%-5level] %d{yyyy-MM-dd HH:mm:ss} %c [%thread] ===== %msg%n

运行观察控制台和文件

但是application.properties的配置并不能满足实际需求,比如文件拆分规则等,我们可以自己添加对应日志框架的配置文件来代替application.properties的日志配置

接下来添加一个logback.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <property name="pattern" value="[%-5level] %d{yyyy-MM-dd HH:mm:ss} %M %L [%thread] %m%n"></property>

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--控制输出流对象,默认为System.out黑色字体-->
        <target>System.err</target>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <pattern>${pattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--只输出error级别的信息-->
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>


    <!--自定义Logger-->
    <logger name="com.zmt" level="info" additivity="dalse">
        <appender-ref ref="console"/>
    </logger>
</configuration>

运行测试代码观察控制台输出

只输出了红色字体的error级别日志。配置文件生效

使用SpringBoot解析日志配置

如果使用SpringBoot解析日志配置我们需要将logback.xml文件修改为logback-spring.xml。因为logback.xml加载过早,无法解析扩展标签。而修改为logback-spring.xml后,可以解析SpringBoot的扩展标签。

在xml文件中添加springProfile标签

  	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <!--控制输出流对象,默认为System.out黑色字体-->
        <target>System.err</target>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--开发环境下解析成一种消息格式-->
            <springProfile name="dev">
                <pattern>${pattern}</pattern>
            </springProfile>
            <!--生产环境下解析成另一种消息格式-->
            <springProfile name="pro">
                <pattern>[%-5level] %d{yyyy-MM-dd HH:mm:ss} %M %L [%thread]========= %m%n</pattern>
            </springProfile>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--只输出error级别的信息-->
            <level>ERROR</level>
            <onMatch>ACCEPT</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
    </appender>

在application.properties添加配置指定环境

#设置为开发环境
spring.profiles.active=dev

运行观察控制台是否是输出“---”

修改为pro环境后再次运行观察

可以看到输出格式不同。配置生效

SpringBoot切换日志实现

在pom文件中进行修改

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
			<exclusions>
        <!-- 排除jar包 -->
				<exclusion>
					<groupId>org.springframework.boot</groupId>
					<artifactId>spring-boot-starter-logging</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

  	<!-- 引入jar包 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-log4j2</artifactId>
		</dependency>

运行发现又使用了log4j2的默认配置打印日志输出。

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

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

相关文章

广西建筑模板的材质类型和特点有哪些?

广西建筑模板常用的材质类型包括木模板、钢模板、竹胶合板、塑料模板和铝合金模板等。每种材质都具有不同的特点和适用范围。 1. 木模板&#xff1a; - 适用于高层建筑的水平模板、剪力墙、竖向墙板、高架桥、立交桥、大坝、隧道施工及梁柱模板。 - 具有高强度和良好的韧性&…

通过全流量分析助力某医院关键业务提高性能

背景 福建某大型医院信息科近期接到多人反应&#xff0c;业务系统访问慢和报错情况&#xff0c;因为问题出现没有时间和操作规律&#xff0c;网络管理员通过多种方式排查&#xff0c;未能得到有效的原因定位。 我们已将NetInside流量分析系统部署到医院的机房内&#xff0c;使用…

2022年京东双十一手机数码全品类数据回顾

2023年双十一临近&#xff0c;特此带大家回顾一下去年双十一热门品类的一些战况数据。这一期是京东手机电脑数码。 整体表现来看&#xff0c;2022年双11大促京东手机、电脑、数码类产品并没有想象中的增长状态&#xff0c;无论是电脑中的笔记本、数码中的相机&#xff0c;或者是…

InnoDB事务

1. 支持的事务 扁平事务&#xff1a;所有操作都处于同一层次 带保持点的扁平事务&#xff1a;事务能够回到保持点的状态。 链事务&#xff1a;系统崩溃时&#xff0c;所有保存点都将消失。 嵌套事务&#xff1a;具有层次结构&#xff08;树&#xff09;。任意一个事务回滚会…

c语言进制的转换二进制转换10进制

c语言进制的转换之二进制转换10进制 c语言的进制的转换 c语言进制的转换之二进制转换10进制一、二进制转换10进制的方法二、10进制程序打印 一、二进制转换10进制的方法 二进制&#xff1a; 二进制逢二进一&#xff0c;所有的数组是0、1组成 十进制转二进制&#xff1a; 除二反…

AD20~PCB的板层设计和布线

1、打开51单片机最小系统的工程文件。 2、完成原理图后续工作&#xff1a;打开原理图文件&#xff0c;双击元件“CH340X”窗口右边弹出元件内部属性设置界面&#xff0c;在窗口下方点击“Footprint ->Add…”按钮进入添加元件类型界面&#xff0c;进入元件封装选择界面&…

2023年行云绽放傲冠股份厨艺比拼团建活动圆满结束

十月金秋&#xff0c;阳光灿烂&#xff0c;碧空如洗。 为了促进员工之间更好的交流&#xff0c;激发员工阳光向上的心态&#xff0c;充满活力&#xff0c;拥抱自然&#xff0c;深圳市行云绽放科技有限公司及深圳市傲冠软件股份有限公司于2023年10月13日组织深圳总部员工自驾出…

接口自动化测试工具大全

在互联网时代&#xff0c;服务端测试已经成为一个重要的产品保障手段&#xff0c;各对此公司实施的方法和技术也不同&#xff0c;本文我们就来讨论一下。 互联网服务端接口自动化是各个公司都需要一部分业务&#xff0c;如何快速高效地完成接口测试呢&#xff1f; 以帮助大家实…

Linux基础命令1——Linux的命令格式与命令分类

目录 Linux命令格式 Linux命令分类 如何判断命令的类型——Type命令 内置命令 外部命令 alias命令 命令的执行效率与过程 Linux命令格式 命令格式 完整的命令格式分为三部分&#xff1a;命令、参数、对象 其中命令与参数、参数与参数、参数与对象之间最少要有一个空格做…

变分贝叶斯深度学习综述

**©PaperWeekly 原创 作者 |**薛博阳 **单位 |**香港中文大学 **研究方向 |**语言模型 引言 近年来&#xff0c;贝叶斯深度学习&#xff08;Bayesian Deep Learn-ing&#xff09;在诸多领域得到广泛关注应用&#xff0c;效果显著。本文将针对贝叶斯深度学习框架进行系…

​如何使用ArcGIS Pro制作一张地形图

01数据来源 本教程所使用的数据是从水经微图中下载的DEM数据&#xff0c;除了DEM数据&#xff0c;常见的GIS数据都可以从水经微图中下载&#xff0c;你可以通过关注“水经注GIS”&#xff0c;然后在后台回复“微图”即可获取软件下载地址&#xff0c;当然也可以直接在水经注…

TensorFlow2从磁盘读取图片数据集的示例(tf.data.Dataset.list_files)

import os import warnings warnings.filterwarnings("ignore") import tensorflow as tf from tensorflow.keras.optimizers import Adam from tensorflow.keras.applications.resnet import ResNet50 from pathlib import Path import numpy as np#数据所在文件夹 …

AI爆文变现脚本:0基础小白的保姆级操作教程-更新迭代

脚本作用&#xff1a;这个脚本主要是辅助训练营的同学使用的&#xff0c;脚本可以增加发文的效率。 脚本现在已经更新了9个版本了。目的是为了更方便大家操作使用。 AI爆文流量主(广告)变现项目的实际操作教程&#xff0c;我之前分享过了&#xff0c;大家感兴趣的可以再去看看…

灰色和测试环境打包串台

事情是这样的&#xff1a; 最近开发总说jenkins灰色环境打包总是到成测试环境的&#xff0c;测试环境总是走到了线上了。我们排查了也很久最终发现原来是这个问题导致的。如下&#xff1a; 修改如下&#xff1a; 问题解决

Tomcat+nginx负载均衡和动静分离

Nginx实现负载均衡和动静分离的原理 Nginx实现负载均衡是通过反向代理实现Nginx服务器作为前端&#xff0c;Tomcat服务器作为后端&#xff0c;web页面请求由Nginx服务来进行转发。 但是不是把所有的web请求转发&#xff0c;而是将静态页面请求Ncinx服务器自己来处理&#xff0c…

当年很流行,现在已经淘汰的前端技术有哪些?

近几年&#xff0c;前端技术真可谓是飞速发展&#xff0c;不断有新的技术涌现&#xff0c;爆火的前端框架 Astro&#xff0c;前端运行时 Bun&#xff0c;构建工具 Vite 等都给前端提供了强大动力。当然&#xff0c;也有很多前端技术随着技术的发展不再需要使用&#xff0c;有了…

【数据结构】线性表(十一)队列:双端队列及其基本操作(初始化、判空、判满、头部入队、尾部入队、头部出队、尾部出队、存取队首队尾元素)

文章目录 一、队列1. 定义2. 基本操作 二、顺序队列三、链式队列双端队列0. 头文件1. 队列结构体2. 初始化3. 判断队列是否为空4. 判断队列是否已满5. 头部入队6. 尾部入队7. 头部出队8. 尾部出队9. 存取队列头部的元素10. 存取队列尾部的元素11. 释放队列内存12. 主函数13. 代…

每日一题 2678. 老人的数目(简单)

简单题&#xff0c;不多说 class Solution:def countSeniors(self, details: List[str]) -> int:ans 0for l in details:if int(l[11:13]) > 60:ans 1return ans

CSS设置超出范围滚动条和滚动条样式

CSS设置超出范围滚动条和滚动条样式 效果展示 当块级内容区域超出块级元素范围的时候&#xff0c;就会以滚动条的形式展示&#xff0c;你可以滚动里面的内容&#xff0c;里面的内容不会超出块级区域范围。 未设置超出隐藏&#xff0c;显示滚动条 超出隐藏&#xff0c;显示滚动…

APP软件外包开发设计原则

设计一个成功的APP需要遵循一些关键的设计原则&#xff0c;以确保用户体验良好、功能明晰、吸引力和易用性。以下是一些重要的APP设计原则&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 用户为中心&…