spring-cloud-starter-gateway 使用中 KafkaAppender的问题
公司需要将应用日志上报到kafka,以供分析与查看。
结合logback可以完成此功能,大致配置如下:
<appender name="KafkaAppender" class="com.github.danielwegener.logback.kafka.KafkaAppender"><encoder class="com.github.danielwegener.logback.kafka.encoding.LayoutKafkaMessageEncoder"><layout class="net.logstash.logback.layout.LogstashLayout" ><includeContext>true</includeContext><includeCallerData>true</includeCallerData><fieldNames class="net.logstash.logback.fieldnames.ShortenedFieldNames"/></layout><charset>UTF-8</charset></encoder><!--kafka topic 需要与配置文件里面的topic一致 否则kafka会沉默并鄙视你--><topic>${topic}</topic><keyingStrategy class="com.github.danielwegener.logback.kafka.keying.HostNameKeyingStrategy" /><deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" /><producerConfig>bootstrap.servers=${BOOT_SERVER}</producerConfig></appender>
上述配置有个问题:
当kafka服务异常时,会阻塞业务系统请求。
此时,引入AsyncAppender可以处理上面的问题,让日志系统异步执行,当kafka出现问题时,不阻塞业务系统,大致配置如下:
<appender name="ASYNC" class="ch.qos.logback.classic.AsyncAppender"><appender-ref ref="KafkaAppender"/><queueSize>1000</queueSize><discardingThreshold>0</discardingThreshold><!--这里一定要配置--><neverBlock>true</neverBlock></appender>
实际使用时,本地启动,一切正常,当将jar放到服务器上时,日志系统无法启动,最终导致服务启动失败,部分堆栈如下:
Caused by: java.lang.IllegalStateException: Logback configuration error detected:
ERROR in com.github.danielwegener.logback.kafka.KafkaAppender[KafkaAppender] - Appender [KafkaAppender] failed to append. org.apache.kafka.common.errors.InterruptException: java.lang.InterruptedException
ERROR in com.github.danielwegener.logback.kafka.KafkaAppender[KafkaAppender] - Appender [KafkaAppender] failed to append. org.apache.kafka.common.errors.InterruptException: java.lang.InterruptedException
ERROR in com.github.danielwegener.logback.kafka.KafkaAppender[KafkaAppender] - Appender [KafkaAppender] failed to append. org.apache.kafka.common.errors.InterruptException: java.lang.InterruptedExceptionat org.springframework.boot.logging.logback.LogbackLoggingSystem.loadConfiguration(LogbackLoggingSystem.java:169)at org.springframework.boot.logging.AbstractLoggingSystem.initializeWithConventions(AbstractLoggingSystem.java:80)at org.springframework.boot.logging.AbstractLoggingSystem.initialize(AbstractLoggingSystem.java:60)at org.springframework.boot.logging.logback.LogbackLoggingSystem.initialize(LogbackLoggingSystem.java:118)at org.springframework.boot.context.logging.LoggingApplicationListener.initializeSystem(LoggingApplicationListener.java:313)at org.springframework.boot.context.logging.LoggingApplicationListener.initialize(LoggingApplicationListener.java:288)at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEnvironmentPreparedEvent(LoggingApplicationListener.java:246)at org.springframework.boot.context.logging.LoggingApplicationListener.onApplicationEvent(LoggingApplicationListener.java:223)at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:127)at org.springframework.boot.context.event.EventPublishingRunListener.environmentPrepared(EventPublishingRunListener.java:76)at org.springframework.boot.SpringApplicationRunListeners.environmentPrepared(SpringApplicationRunListeners.java:53)at org.springframework.boot.SpringApplication.prepareEnvironment(SpringApplication.java:345)at org.springframework.boot.SpringApplication.run(SpringApplication.java:308)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1226)at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215)at cn.com.bdo.gateway.BizBdoGatewayApplication.main(BizBdoGatewayApplication.java:16)
经过不断尝试,日志系统添加以下配置即可处理上述问题:
<logger name="org.springframework.boot.context.logging" level="DEBUG"/>
由于只有服务器上有问题,debug比较困难,所以没有继续分析原因。
特此记录。
相关文章:
spring-cloud-starter-gateway 使用中 KafkaAppender的问题
公司需要将应用日志上报到kafka,以供分析与查看。 结合logback可以完成此功能,大致配置如下: <appender name"KafkaAppender" class"com.github.danielwegener.logback.kafka.KafkaAppender"><encoder class&…...
【全套】基于分类算法的学业警示预测信息管理系统
【全套】基于分类算法的学业警示预测信息管理系统 【摘 要】 随着网络技术的发展基于分类算法的学业警示预测信息管理系统是一种新的管理方式,同时也是现代学业预测信息管理的基础,利用互联网的时代与实际情况相结合来改变过去传统的学业预测信息管理中…...
Elasticsearch Python 客户端是否与自由线程 Python 兼容?
作者:来自 Elastic Quentin_Pradet 在这篇文章中,我们将进行一些实验,看看 Python Elasticsearch 客户端是否与新的 Python 3.13 自由线程(free-threading)版本兼容,其中 GIL 已被删除。 介绍 但首先&…...
基于大语言模型的组合优化
摘要:组合优化(Combinatorial Optimization, CO)对于提高工程应用的效率和性能至关重要。随着问题规模的增大和依赖关系的复杂化,找到最优解变得极具挑战性。在处理现实世界的工程问题时,基于纯数学推理的算法存在局限…...
#CSS混合模式:解决渐变背景下的文字可见性问题
在现代网页设计中,渐变背景的使用越来越普遍。然而,当我们在渐变背景上放置文字时,常常会遇到一个问题:文字在某些背景颜色下可能变得难以阅读。今天,我们将探讨一个优雅的解决方案:使用CSS混合模式。 问题…...
Vue2+OpenLayers给标点Feature添加信息窗体(提供Gitee源码)
目录 一、案例截图 二、安装OpenLayers库 三、代码实现 3.1、信息窗体DOM元素 3.2、创建Overlay 3.3、创建一个点 3.4、给点初始化点击事件 3.5、完整代码 四、Gitee源码 一、案例截图 二、安装OpenLayers库 npm install ol 三、代码实现 初始化变量: d…...
实战threeJS数字孪生开源 数字工厂
threeJS数字孪生 数字工厂 设备定位 基于three.js的数字工厂开源项目介绍 一、项目概述 本项目是一款基于three.js的数字工厂项目,旨在通过3D可视化技术,为工业制造领域提供一个直观、高效、智能的生产监控与管理平台。该项目结合了现代前端技术栈&…...
【Python基础篇】——第3篇:从入门到精通:掌握Python数据类型与数据结构
第3篇:数据类型与数据结构 目录 Python中的数据类型概述列表(List) 创建列表列表的基本操作列表方法列表推导式 元组(Tuple) 创建元组元组的基本操作元组的不可变性 字典(Dictionary) 创建字典…...
算法3(力扣83)-删除链表中的重复元素
1、题目:给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 2、实现( 因为已排序,所以元素若重复,必然在其下一位)(这里为在vscod…...
HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载,Scroll滚动到顶部
HarmonyOS 鸿蒙 ArkTs(5.0.1 13)实现Scroll下拉到顶刷新/上拉触底加载 效果展示 使用方法 import LoadingText from "../components/LoadingText" import PageToRefresh from "../components/PageToRefresh" import FooterBar from "../components/…...
.NET8.0多线程编码结合异步编码示例
1、创建一个.NET8.0控制台项目来演示多线程的应用 2、快速创建一个线程 3、多次运行程序,可以得到输出结果 这就是多线程的特点 - 当多个线程并行执行时,它们的具体执行顺序是不确定的,除非我们使用同步机制(如 lock、信号量等&am…...
SpringBoot项目中解决CORS跨域资源共享问题
在Spring Boot项目中解决CORS(跨域资源共享)问题,可以通过以下几种方法: 1. 使用CrossOrigin注解 这是最简单的方法,适用于单个控制器或控制器方法级别的跨域配置。你可以在控制器类或具体的方法上使用CrossOrigin注…...
Android string.xml中特殊字符转义
项目中要在string.xml 中显示特殊符号 空格: (普通的英文半角空格但不换行) 窄空格: (中文全角空格 (一个中文宽度)) (半个中文宽度,但两个空格比一个中文…...
解析传统Workflow、AI Workflow与AI Agent概念,并通过Coze案例探讨利用AI工作流构建应用的实践流程
传统工作流 工作流入门这篇就够了 BPMN.JS中文教程 BPMN 工作流引擎解析 定义:工作流是在计算机支持下业务流程的自动或半自动化,其通过对流程进行描述以及按一定规则执行以完成相应工作。 应用:随着计算机技术的发展以及工业生产、办公自动…...
光谱相机的光谱分辨率可以达到多少?
多光谱相机 多光谱相机的光谱分辨率相对较低,波段数一般在 10 到 20 个左右,光谱分辨率通常在几十纳米到几百纳米之间,如常见的多光谱相机光谱分辨率为 100nm 左右。 高光谱相机 一般的高光谱相机光谱分辨率可达 2.5nm 到 10nm 左右&#x…...
android Recyclerview viewholder统一封装
Recyclerview holder 统一封装 ViewHolder类 import android.annotation.SuppressLint import android.content.Context import android.graphics.Color import android.graphics.drawable.GradientDrawable import android.os.Build import android.os.CountDownTimer import…...
Windows部署NVM并下载多版本Node.js的方法(含删除原有Node的方法)
本文介绍在Windows电脑中,下载、部署NVM(node.js version management)环境,并基于其安装不同版本的Node.js的方法。 在之前的文章Windows系统下载、部署Node.js与npm环境的方法(https://blog.csdn.net/zhebushibiaoshi…...
51单片机入门基础
目录 一、基础知识储备 (一)了解51单片机的基本概念 (二)掌握数字电路基础 (三)学习C语言编程基础 二、开发环境搭建 (一)硬件准备 (二)软件准备 三、…...
老centos7 升级docker.io为docker-ce 脚本
旧的centos7 之前安装的是docker.io 由于一些原因,像docker compose 等版本变化,以及docker.io源受限等,我们要更新到docker-ce 并使用国内阿里云的源怎么处理?下面直接上脚本,upgrade-docker.sh #!/bin/bashset -e# 创建临时目录 TEMP_DIR"./tmp" mkdir -p "…...
数仓建模(三)建模三步走:需求分析、模型设计与数据加载
本文包含: 数据仓库的背景与重要性数据仓库建模的核心目标本文结构概览:需求分析、模型设计与数据加载 目录 第一部分:需求分析 1.1 需求分析的定义与目标 1.2 需求分析的步骤 1.2.1 业务需求收集 1.2.2 技术需求分析 1.2.3 成果输出…...
linux https拦截与url解析
uprobe 拦截TLS库 用 eBPF uprobe 拦截 TLS 库(OpenSSL/GnuTLS/Go TLS),在加密前 / 解密后捕获明文 HTTP 请求,即可解析出 HTTPS URL,无需 CA 证书、无需修改应用。 核心原理 HTTPS 明文(含 URL…...
如何高效管理LiteDB数据库?LiteDB.Studio实战指南与深度解析
如何高效管理LiteDB数据库?LiteDB.Studio实战指南与深度解析 【免费下载链接】LiteDB.Studio A GUI tool for viewing and editing documents for LiteDB v5 项目地址: https://gitcode.com/gh_mirrors/li/LiteDB.Studio 在现代软件开发中,嵌入式…...
[iPhone USB网络共享]完全指南:从驱动故障到高效连接
[iPhone USB网络共享]完全指南:从驱动故障到高效连接 【免费下载链接】Apple-Mobile-Drivers-Installer Powershell script to easily install Apple USB and Mobile Device Ethernet (USB Tethering) drivers on Windows! 项目地址: https://gitcode.com/gh_mirr…...
在ESP32上为LVGL 8.x添加中文输入法:从拼音到候选词显示的完整实现
在ESP32上为LVGL 8.x实现高性能中文输入法的工程实践 当我们在智能家居控制面板上输入Wi-Fi密码时,或者在工业HMI设备中输入参数时,中文输入往往成为嵌入式设备最令人头疼的用户体验瓶颈。ESP32作为物联网领域的主流芯片,其有限的RAM资源&…...
3步安装ViGEMBus虚拟手柄驱动:让Windows游戏体验全面升级
3步安装ViGEMBus虚拟手柄驱动:让Windows游戏体验全面升级 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 想要在Windows系统上使用任何手柄玩游戏…...
AI头像生成器开发者必备:GitHub项目管理核心技巧详解
AI头像生成器开发者必备:GitHub项目管理核心技巧详解 1. 引言:为什么GitHub对AI头像生成器项目至关重要 开发一个AI头像生成器项目时,你是否遇到过这些挑战:团队成员同时修改同一文件导致冲突、新功能上线后出现意外bug却无法快速…...
永磁同步直线电机建模、仿真及优化教学:从基础原理入门到工程应用精通的系统学习与实战指南
永磁同步直线电机,建模,仿真及优化教学从入门到精通永磁同步直线电机高速精密绘图仪笔尖能在纸上跑出米每秒级速度却连发丝粗细的误差都没有,晶圆台托着指甲盖大的芯片在光刻机里微米级挪位卡得死死的,这些“直来直去还准到离谱”…...
影墨·今颜GPU算力适配:RTX 4090单卡实测每秒1.8张1024x1536图
影墨今颜GPU算力适配:RTX 4090单卡实测每秒1.8张1024x1536图 1. 引言:当顶级AI影像遇上顶级显卡 如果你是一位内容创作者,或者对AI生成人像有浓厚兴趣,那么“影墨今颜”这个名字最近可能已经进入了你的视野。它被描述为一款融合…...
Qwen3.5-4B-Claude模型Java微服务集成指南:SpringBoot实战案例
Qwen3.5-4B-Claude模型Java微服务集成指南:SpringBoot实战案例 1. 引言:当大模型遇上微服务 最近在开发企业知识管理系统时,我们遇到了一个典型需求:如何让传统Java微服务架构与前沿的大语言模型无缝集成。经过多次尝试…...
通义千问1.8B-Chat部署教程:Supervisor管理服务,稳定运行不中断
通义千问1.8B-Chat部署教程:Supervisor管理服务,稳定运行不中断 1. 项目概述 通义千问1.5-1.8B-Chat-GPTQ-Int4是阿里云推出的轻量级对话模型,经过GPTQ-Int4量化后,显存需求仅约4GB,非常适合在消费级GPU或边缘设备上…...
