当前位置: 首页 > news >正文

【第19章】Spring Cloud之Gateway自定义Logback配置

文章目录

  • 前言
  • 一、内置配置
    • 1. 关联依赖
    • 2. 内置配置
  • 二、自定义配置
    • 1. 日志级别
    • 2. 彩色日志
    • 3. 自定义配置
    • 4. 增加打印语句
    • 5. 效果展示
  • 总结


前言

网关层作为我们程序的主入口,有着至关重要的作用,下面我们通过自定义Logback配置增强网关层的日志输出,为我们的网关提供更加详细和更加细化的日志输出。

大家有没有好奇过一件事,为什么我们的Spring Boot项目新建完,日志组件就能刷刷地打印呢?这是因为Spring Boot帮助我们集成了Logback并定义了默认的logger和appender,接下来我们来进行详细的解析。


一、内置配置

1. 关联依赖

spring-boot-starter-web>spring-boot-starter>spring-boot-starter-logging>logback-classic>logback-core

2. 内置配置

在这里插入图片描述

base.xml:定义了基本配置和引入其他配置文件
defaults.xml:定义了彩色日志,日志变量和日志logger
console-appender.xml:定义了控制台输出appender
file-appender.xml:定义了文件输出appender

二、自定义配置

我们自定义配置生效后,Spring Boot内置配置就不再生效,大家要知道这点
设计思路:

  • debug.log(存储debug及高级别日志)
  • info.log(存储info及高级别日志)
  • error.log(存储error及高级别日志)

1. 日志级别

我们只关注三个常用的:DEBUG、INFO、ERROR即可

TRACE<DEBUG<INFO<WARN<ERROR<FATAL

2. 彩色日志

颜色

  • blue
  • cyan
  • green
  • magenta
  • red
  • yellow

样式

  • bold(粗体)
  • faint(淡色)
  • highlight(高亮)

3. 自定义配置

<?xml version="1.0" encoding="UTF-8"?>
<configuration><!-- 引入Spring Boot的默认logback配置 --><property name="CONSOLE_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(%applicationName[%15.15t]){faint} %clr(${LOG_CORRELATION_PATTERN:-}){faint}%clr(%-40.40logger{39}:%L) %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><property name="FILE_PATTERN" value="${FILE_LOG_PATTERN:-%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd HH:mm:ss.SSS}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } %applicationName[%t] ${LOG_CORRELATION_PATTERN:-}%-40.40logger{39}:%L : %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/><include resource="org/springframework/boot/logging/logback/defaults.xml"/><!-- 自定义控制台输出模板 --><property name="LOG_HOME" value="../logs/gateway/"/><property name="LOG_FILE" value="gateway"/><property name="LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START" value="false"/><property name="LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE" value="10MB"/><property name="LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP" value="0"/><property name="LOGBACK_ROLLINGPOLICY_MAX_HISTORY" value="7"/><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>${CONSOLE_LOG_THRESHOLD}</level></filter><encoder><pattern>${CONSOLE_PATTERN}</pattern><charset>${CONSOLE_LOG_CHARSET}</charset></encoder></appender><appender name="DEBUG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>DEBUG</level></filter><encoder><pattern>${FILE_PATTERN}</pattern><charset>${FILE_LOG_CHARSET}</charset></encoder><file>${LOG_HOME}${LOG_FILE}_debug.log</file><!--大小和时间基于滚动策略--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_HOME}${LOG_FILE}_debug.%d{yyyy-MM-dd}.%i.gz</fileNamePattern><cleanHistoryOnStart>${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart><maxFileSize>${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB}</maxFileSize><totalSizeCap>${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0}</totalSizeCap><maxHistory>${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-7}</maxHistory></rollingPolicy></appender><appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>INFO</level></filter><encoder><pattern>${FILE_PATTERN}</pattern><charset>${FILE_LOG_CHARSET}</charset></encoder><file>${LOG_HOME}${LOG_FILE}_info.log</file><!--大小和时间基于滚动策略--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_HOME}${LOG_FILE}_info.%d{yyyy-MM-dd}.%i.gz</fileNamePattern><cleanHistoryOnStart>${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart><maxFileSize>${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB}</maxFileSize><totalSizeCap>${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0}</totalSizeCap><maxHistory>${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-7}</maxHistory></rollingPolicy></appender><appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><filter class="ch.qos.logback.classic.filter.ThresholdFilter"><level>ERROR</level></filter><encoder><pattern>${FILE_PATTERN}</pattern><charset>${FILE_LOG_CHARSET}</charset></encoder><file>${LOG_HOME}${LOG_FILE}_error.log</file><!--大小和时间基于滚动策略--><rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy"><fileNamePattern>${LOG_HOME}${LOG_FILE}_error.%d{yyyy-MM-dd}.%i.gz</fileNamePattern><cleanHistoryOnStart>${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false}</cleanHistoryOnStart><maxFileSize>${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB}</maxFileSize><totalSizeCap>${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0}</totalSizeCap><maxHistory>${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-7}</maxHistory></rollingPolicy></appender><!-- 设置特定包的日志级别 --><logger name="org.springframework" level="INFO"/><logger name="org.hibernate" level="INFO"/><logger name="com.alibaba" level="INFO"/><logger name="io.netty" level="INFO"/><logger name="reactor.netty" level="INFO"/><!-- Root Logger --><root level="DEBUG"><appender-ref ref="CONSOLE"/><appender-ref ref="DEBUG_FILE"/><appender-ref ref="INFO_FILE"/><appender-ref ref="ERROR_FILE"/></root>
</configuration>

4. 增加打印语句

package org.example.gateway.config;import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;/*** Create by zjg on 2024/8/3*/
@Component
public class GatewayApplicationAware implements ApplicationContextAware {Logger logger = LoggerFactory.getLogger(GatewayApplicationAware.class);@Overridepublic void setApplicationContext(ApplicationContext applicationContext) throws BeansException {logger.debug("Debug log message");logger.info("Info log message");logger.error("Error log message");}
}

5. 效果展示

在这里插入图片描述
在这里插入图片描述


总结

回到顶部

有了详细的日志文件记录,我们就再也不怕程序报错了,加油,奥利给!

相关文章:

【第19章】Spring Cloud之Gateway自定义Logback配置

文章目录 前言一、内置配置1. 关联依赖2. 内置配置 二、自定义配置1. 日志级别2. 彩色日志3. 自定义配置4. 增加打印语句5. 效果展示 总结 前言 网关层作为我们程序的主入口&#xff0c;有着至关重要的作用&#xff0c;下面我们通过自定义Logback配置增强网关层的日志输出&…...

Java流式编程

一、流的基础概念 流&#xff08;Stream&#xff09;&#xff1a; 定义&#xff1a;流是一种可以在数据集合上进行操作的抽象化序列&#xff0c;它没有存储数据的能力&#xff0c;而是通过一系列的操作来处理数据。特性&#xff1a; 无存储&#xff1a;流不存储数据&#xff0c…...

高可用集群keepalived从部署到实战一篇解决

目录 一.高可用集群 1.1 集群类型 1.2 系统可用性 1.3 系统故障 1.4 实现高可用 1.5.VRRP&#xff1a; 1.5.1 VRRP 相关术语 1.5.2 VRRP 相关技术 二.Keepalived 部署 2.1 keepalived 简介 2.2keepalived架构 2.3 Keepalived 环境准备 2.4 Keepalived 相关文件 2.…...

22222222222

222222222222222222...

springboot宠物相亲平台-计算机毕业设计源码16285

目 录 摘要 1 绪论 1.1 选题背景与意义 1.2国内外研究现状 1.3论文结构与章节安排 2 开发环境及相关技术介绍 2.1 MySQL数据库的介绍 2.2 B/S架构的介绍 2.3 Java语言 2.4 SpringBoot框架 3 宠物相亲平台系统分析 3.1 可行性分析 3.1.1 技术可行性分析 3.1.2 经济…...

警惕:手机被监听时会出现这些情况

在互联网高速发展的今天&#xff0c;手机已成为我们生活中不可或缺的一部分&#xff0c;它连接着我们的工作、学习与社交。然而&#xff0c;享受科技便利的同时&#xff0c;手机监听的风险也如影随形。 美国“斯诺登”事件曝光后&#xff0c;公众才惊觉手机监控可能就在身边。…...

Windows 系统下 MongoDB和PostgreSQL数据库数据的备份和恢复

MongoDB 数据库的备份和恢复 在 Windows 系统下进行 MongoDB 数据库的备份&#xff08;mongodump&#xff09;和恢复&#xff08;mongorestore&#xff09;操作相对直接。下面我将分别介绍这两个过程。 1. 备份数据库 (mongodump) 前提条件&#xff1a; 确保 MongoDB 服务正…...

必应Bing国内搜索广告开户收费标准公示

微软必应Bing作为全球领先的搜索引擎之一&#xff0c;其广告平台为企业提供了强大的营销工具和广泛的用户覆盖。云衔科技为广大企业提供全方位的广告开户及代运营服务&#xff0c;助力企业实现营销升级。 一、必应Bing国内搜索广告开户收费标准公示 根据最新政策&#xff0c;…...

大模型汇总:文心一言大模型、腾讯混元大模型、通义千问大模型、字节豆包大模型、智普清言大模型、KIMI 大模型、紫东太初大模型、讯飞星火大模型

文心一言大模型 作为百度自主研发的大型语言模型&#xff0c;具有显著的特点、广泛的应用场景以及独特的优势。以下是对文心一言特点、应用、优势的详细介绍&#xff1a; 特点&#xff1a;知识增强&#xff1a; 文心一言通过持续学习技术&#xff0c;不断吸收海量数据和知识…...

C语言——结构体、共用体、枚举、位运算

C语言——结构体、共用体、枚举、位运算 结构体共用体枚举位运算 结构体 如果将复杂的复杂的数据类型组织成一个组合项&#xff0c;在一个组合项中包含若干个类型不同&#xff08;当然也可以相同&#xff09;的数据项。 C语言允许用户自己指定这样一种数据结构&#xff0c;它称…...

[LitCTF 2024]exx

输入任意账号密码进行抓包 考查xxe漏洞 我们加入xxe语句并让它回显我们要它会显的东西&#xff1a;先来读取一下用户名和密码 我们可以看到&#xff0c;它已经读取了服务器下的账号密码文件&#xff0c;接着我们直接读取根目录下的flag文件。通常情况下flag文件的位置一般就根…...

kafka运维常用命令

KAFKA常用命令 一、KAFKA常用命令1.1kafka造数1.2kafla抓包1.2.1实时查看kafka数据1.2.2查看kafka历史数据1.2.3查看kafka中带有某个ip的历史数据1.2.4将kafka数据存入文件中 一、KAFKA常用命令 1.1kafka造数 示例&#xff1a;给topic为 ids-test 造数 ./kafka-console-produ…...

笔记:在WPF中OverridesDefaultStyle属性如何使用

一、目的&#xff1a;介绍下在WPF中OverridesDefaultStyle属性如何使用 OverridesDefaultStyle 属性在 WPF 中用于控制控件是否使用默认的主题样式。将其设置为 True 时&#xff0c;控件将不会应用默认的主题样式&#xff0c;而是完全依赖于你在 Style 中定义的样式。以下是如何…...

MATLAB/Simulink 与Gazebo联合仿真

在机器人技术、自动化控制和仿真领域,MATLAB和Gazebo是两种常用的工具,它们各自具有不同的优势,但在某些情况下,可以联合使用以实现更复杂的仿真效果。下面将介绍如何在MATLAB环境中与Gazebo进行联合仿真。 MATLAB与Gazebo联合仿真的基础 MATLAB环境:MATLAB是一款强大的数…...

并查集-应用方向以及衍生汇总+代码实现(c++)-学习一个数据结构就会做三类大题!

并查集的核心功能&#xff0c;合并集合&#xff0c;查找元素&#xff0c;这两个最基本的功能相关题目本文不列举了&#xff0c;主要是一些和图相关的&#xff1a; 并查集的核心母题 一、连通性检测&#xff1a; 问题&#xff1a;判断在一个图中&#xff0c;任意两点是否连通。…...

设计模式六大原则-开放封闭原则(二)

开放封闭原则&#xff08;Open-Closed Principle, OCP&#xff09;是设计模式六大原则之一&#xff0c;也是面向对象设计&#xff08;OOD&#xff09;中的核心原则之一。它强调软件实体&#xff08;如类、模块、函数等&#xff09;应该对扩展开放&#xff0c;对修改封闭。这一原…...

C# 截取两个点之间的线段,等距分割线

//取线段上两点之间的沿线线段//line 线//startDist:距离线第一个点的起点位置//stopDist:距离线第一个点的终点位置public static List<double[]> lineSliceAlong(List<double[]> line, double startDist, double stopDist){double travelled 0;double overshot …...

打造聊天流式回复效果:Spring Boot+WebSocket + JS实战

本篇博客将带领你使用 Spring Boot、WebSocket 和 JavaScript 实现一个类似 ChatGPT 的流式回复效果。前端发送消息后&#xff0c;后端接收消息并请求 AI API&#xff0c;并将 AI 返回的流式响应实时推送到前端&#xff0c;最终在聊天界面呈现出逐字出现的打字效果。 技术原理…...

202年版最新Python下载安装+PyCharm下载安装激活和使用教程!(附安装包+激活码)

一、Python解释器下载【运行环境】 Python官网&#xff1a; https://www.python.org Python各版本解释器官网&#xff1a; https://www.python.org/downloads/ 二、Windows系统安装Python解释器 下载Python版本解释器 现在已经更新到了3.13版本的Python解释器&#xff0c;但…...

【面试宝典】spring常见面试题总结[上]

一、什么是 Spring 框架&#xff1f; Spring 框架是一个为 Java 应用程序的开发提供了综合、广泛的基础性支持的 Java 平台。 Spring 帮助开发者解决基础性的问题&#xff0c;使开发者专注编写业务代码。 二、Spring Freamework 有哪些功能&#xff1f; IOC: 控制反转AOP: 面…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

css的定位(position)详解:相对定位 绝对定位 固定定位

在 CSS 中&#xff0c;元素的定位通过 position 属性控制&#xff0c;共有 5 种定位模式&#xff1a;static&#xff08;静态定位&#xff09;、relative&#xff08;相对定位&#xff09;、absolute&#xff08;绝对定位&#xff09;、fixed&#xff08;固定定位&#xff09;和…...

使用Matplotlib创建炫酷的3D散点图:数据可视化的新维度

文章目录 基础实现代码代码解析进阶技巧1. 自定义点的大小和颜色2. 添加图例和样式美化3. 真实数据应用示例实用技巧与注意事项完整示例(带样式)应用场景在数据科学和可视化领域,三维图形能为我们提供更丰富的数据洞察。本文将手把手教你如何使用Python的Matplotlib库创建引…...

C# 表达式和运算符(求值顺序)

求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如&#xff0c;已知表达式3*52&#xff0c;依照子表达式的求值顺序&#xff0c;有两种可能的结果&#xff0c;如图9-3所示。 如果乘法先执行&#xff0c;结果是17。如果5…...

wpf在image控件上快速显示内存图像

wpf在image控件上快速显示内存图像https://www.cnblogs.com/haodafeng/p/10431387.html 如果你在寻找能够快速在image控件刷新大图像&#xff08;比如分辨率3000*3000的图像&#xff09;的办法&#xff0c;尤其是想把内存中的裸数据&#xff08;只有图像的数据&#xff0c;不包…...

鸿蒙Navigation路由导航-基本使用介绍

1. Navigation介绍 Navigation组件是路由导航的根视图容器&#xff0c;一般作为Page页面的根容器使用&#xff0c;其内部默认包含了标题栏、内容区和工具栏&#xff0c;其中内容区默认首页显示导航内容&#xff08;Navigation的子组件&#xff09;或非首页显示&#xff08;Nav…...

python基础语法Ⅰ

python基础语法Ⅰ 常量和表达式变量是什么变量的语法1.定义变量使用变量 变量的类型1.整数2.浮点数(小数)3.字符串4.布尔5.其他 动态类型特征注释注释是什么注释的语法1.行注释2.文档字符串 注释的规范 常量和表达式 我们可以把python当作一个计算器&#xff0c;来进行一些算术…...

在Spring Boot中集成RabbitMQ的完整指南

前言 在现代微服务架构中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信、解耦系统组件的重要工具。RabbitMQ 是一个流行的消息中间件&#xff0c;支持多种消息协议&#xff0c;具有高可靠性和可扩展性。 本博客将详细介绍如何在 Spring Boot 项目…...

深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”

深入浅出JavaScript中的ArrayBuffer&#xff1a;二进制数据的“瑞士军刀” 在JavaScript中&#xff0c;我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时&#xff0c;单纯依赖字符串或数组就显得力不从心了。这时&#xff…...

GB/T 43887-2024 核级柔性石墨板材检测

核级柔性石墨板材是指以可膨胀石墨为原料、未经改性和增强、用于核工业的核级柔性石墨板材。 GB/T 43887-2024核级柔性石墨板材检测检测指标&#xff1a; 测试项目 测试标准 外观 GB/T 43887 尺寸偏差 GB/T 43887 化学成分 GB/T 43887 密度偏差 GB/T 43887 拉伸强度…...