Log4j2 配置日志记录发送到 kafka 中
前言
log4j2 在 2.11.0 之后的版本,已经内置了 KafkaAppender 支持可以将打印的日志直接发送到 kafka 中,在这之前如果想要集中收集应用的日志,就需要自定义一个 Layout 来实现,相对来说还是比较麻烦的。
官网文档:Log4j – Log4j 2 Appenders
依赖
<!-- kafka client --><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.0.0</version></dependency><!-- 支持 scala --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api-scala_2.12</artifactId><version>11.0</version></dependency><!-- 核心依赖 --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.20.0</version></dependency><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.20.0</version></dependency>
配置
注意这里有个 syncSend 控制着是否异步发送,false 使用异步发送也就是会攒小批发送,拥有更高的吞吐量,但相对来说延迟也会增加,建议生产环境开启,本地环境关闭,否则可能会出现程序结束了直接退出,导致 kafka 的批攒的数据没有来得及发送,自然也会导致数据丢失。
此外,如果不想每个类的日志都采集到 kafaka 里面,我们可以定义个类,通过这个类发送的日志才收集到 kafka 里面,可以参考下面的配置例子。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO"><Properties><Property name="kafkaServers">localhost:9092</Property></Properties><Appenders><!-- 定义 Kafka Appender --><Kafka name="KafkaAppender" syncSend="false" topic="recomm-system-log"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" /><!-- 在此处配置 Kafka 的连接信息 --><Property name="bootstrap.servers">${kafkaServers}</Property></Kafka><Console name="ConsoleAppender" target="SYSTEM_OUT"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" /></Console></Appenders><Loggers><Root level="info"><!-- 将日志记录到控制台 Appender --><AppenderRef ref="ConsoleAppender" /></Root><Logger name="log2kafka.KafkaSender$"><Appender-ref ref="KafkaAppender"/></Logger></Loggers>
</Configuration>
例子
这里用的是 scala,如果是 java 基本大同小异
package log2kafka
import org.apache.logging.log4j.scala.Loggingobject KafkaSender extends Logging {def send(msg:Any): Unit ={logger.info(msg.toString)}def main(args: Array[String]): Unit = {logger.info("print msg to kafka")}}
kafka 命令行查看数据:
(base) ➜ temp kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testlog
2023-08-30 19:42:05 INFO KafkaSender$:12 - print msg to kafka相关文章:
Log4j2 配置日志记录发送到 kafka 中
前言 log4j2 在 2.11.0 之后的版本,已经内置了 KafkaAppender 支持可以将打印的日志直接发送到 kafka 中,在这之前如果想要集中收集应用的日志,就需要自定义一个 Layout 来实现,相对来说还是比较麻烦的。 官网文档:L…...
Linux用户与组管理(03)(八)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一、组管理 1、概述 2、用户信息查看 总结 前言 今天是学习用户与组管理的最后一节课,这节课主要是组管理的内容,希望能一起学习ÿ…...
Java自定义异常
Java标准库定义的常用异常包括: 当我们在代码中需要抛出异常时,尽量使用JDK已定义的异常类型。例如,参数检查不合法,应该抛出IllegalArgumentException: static void process1(int age) {if (age < 0) {throw new…...
vscode远程调试php
使用vscode远程调试php的方法 1.安装remote ssh插件 2.连接服务器 可以点击左下角的绿色按钮,或者ctrlshiftp打开命令框输入remote ssh应该也有。 3.在服务器端vscode安装php debug插件 4.安装xdebug xdebug是用来调试php的软件,原本和vscode没什么关…...
C语言:截断+整型提升练习
详情关于整型提升与截断见文章:《C语言:整型提升》 一、代码一 int main() { char a -1; signed char b -1; unsigned char c -1; printf("%d %d %d", a, b, c); return 0; } 求输出结果 解析如下代码: int mai…...
Kubernetes技术--k8s核心技术kubectl命令行工具
(1).概述 kubectl是Kubernetes集群的命令行工具,通过 kubectl 能够对集群本身进行管理,并能够在集群上进行容器化应用的安装部署。 (2).语法 Kubectl [command] [type] [name] [flags] 语法参数说明: command: 指定要对资源执行的操作,例如 create、get、describe 和 delet…...
Element浅尝辄止9:Popover 弹出框组件
Popover 的属性与 Tooltip 很类似,它们都是基于Vue-popper开发的,因此有重复属性 1.如何使用? /*trigger属性用于设置何时触发 Popover,支持四种触发方式: hover,click,focus 和 manual。 对于…...
程序开发:构建功能强大的应用的艺术
程序开发是在今天的数字化时代中扮演重要角色的一项技术。通过编写代码,开发人员能创造出无数不同的应用,从简单的计算器到复杂的社交平台。电子商务应用、在线教育平台、医疗记录系统等,都重视程序开发的重要性,通过这其中的交互…...
(七)k8s实战-高级调度
一、CronJob 定时任务 1、cron 表达式 # ┌───────────── 分钟 (0 - 59) # │ ┌───────────── 小时 (0 - 23) # │ │ ┌───────────── 月的某天 (1 - 31) # │ │ │ ┌───────────── 月份 (1 - 12) # │ │ │ │ ┌…...
HTTP/1.1协议中的八种请求
2023年8月29日,周二晚上 目录 概述八种请求GET请求POST请求PUT请求PATCH请求DELETE请求HEAD请求OPTIONS请求TRACE请求 概述八种请求 HTTP/1.1协议中定义了8种常用的请求方法,分别是:1. GET 用途:请求指定的页面信息,并返回实体主体。例子:获取一个网页、图片等静态…...
面试系列 - JVM内存模型和调优详解
目录 一、JVM内存模型 1. 程序计数器(Program Counter Register): 2.Java虚拟机栈(Java Virtual Machine Stacks): 3. 本地方法栈(Native Method Stack): 5. 方法区…...
JavaScript -【第一周】
文章来源于网上收集和自己原创,若侵害到您的权利,请您及时联系并删除~~~ JavaScript 介绍 变量、常量、数据类型、运算符等基础概念 能够实现数据类型的转换,结合四则运算体会如何编程。 体会现实世界中的事物与计算机的关系理解什么是数据并…...
高性能缓存 Caffeine 原理及实战
Caffeine 是基于Java 8 开发的、提供了近乎最佳命中率的高性能本地缓存组件,Spring5 开始不再支持 Guava Cache,改为使用 Caffeine。 1 算法原理 对于 Java 进程内缓存我们可以通过 HashMap 来实现。不过,Java 进程内存是有限的,…...
【算法】leetcode 105 从前序与中序遍历序列构造二叉树
题目 输入某二叉树的前序遍历和中序遍历的结果,请构建该二叉树并返回其根节点。 假设输入的前序遍历和中序遍历的结果中都不含重复的数字。 示例 1: Input: preorder [3,9,20,15,7], inorder [9,3,15,20,7] Output: [3,9,20,null,null,15,7]示例 2: Input: pr…...
11 | Spark计算数据文件中每行数值的平均值
需求:计算数据文件中的数值的平均值 背景: 你有一个数据文件,其中包含一系列数值,每行一个数值,数值之间用逗号分隔。你想使用Apache Spark分布式计算框架来读取数据文件中的数值并计算它们的平均值。功能要求: 通过Spark配置和上下文初始化Spark应用程序。从数据文件中…...
AI与游戏创新:深度学习的起跑枪声
《AI与游戏创新:深度学习的起跑枪声》 目录 引言AIGC定义与重要性AI在游戏中的应用AI推动游戏创新的可能途径AIGC的挑战与解决方案结论:AI是游戏行业的下一站 引言 AI(人工智能)正在全球范围内改变各个行业,游戏行…...
【GUI开发】用python爬YouTube博主信息,并开发成exe软件
文章目录 一、背景介绍二、代码讲解2.1 爬虫2.2 tkinter界面2.3 存日志 三、软件演示视频四、说明 一、背景介绍 你好,我是马哥python说,一名10年程序猿。 最近我用python开发了一个GUI桌面软件,目的是爬取相关YouTube博主的各种信息&#…...
7.6 函数的递归调用
直接调用: ### 1. 直接递归调用 直接递归调用是指一个函数直接调用自己。例如,计算阶乘的函数,可以使用递归方法: int factorial(int n) {if (n < 1) {return 1;}return n * factorial(n - 1); } 在这个例子中,f…...
本地开机启动jar
1:首先有个可运行的jar包 本地以ruiyi代码为例打包 2:编写bat命令---命名为.bat即可 echo off java -jar D:\everyDay\test\RuoYi\target\RuoYi.jar 3:设置为开机自启动启动 快捷键winr----输入shell:startup---打开启动文档夹 把bat文件复…...
解决uniapp手机真机调试时找不到手机问题
1、检查 USB 调试是否开启 2、检查是否有选择 文件 传输 选项 3、如果上述都做了还找不到,可以看看开发者选项中的【USB设置】,把模式改为 MIDI 模式...
SD 协议
1、SD 协议科普 SD 协议的全称是 Secure Digital (SD) Interface Protocol,它是由 SD 协会(SDA,Secure Digital Association) 制定的一套标准。 eMMC、SD、SDIO 的关系: SD 卡的协议最初是基于 MMC(MultiM…...
告别手动维护!用DataX-Web搞定MySQL到ClickHouse的增量同步(含时间戳配置)
高效构建MySQL到ClickHouse的增量同步管道:DataX-Web实战指南 在数据驱动的商业环境中,企业每天都会产生海量的业务数据。这些数据通常存储在OLTP系统如MySQL中,但为了进行分析和报表生成,我们需要将这些数据同步到OLTP系统如Clic…...
Qwen3-Embedding-4B快速上手:5分钟部署,体验119语种向量化
Qwen3-Embedding-4B快速上手:5分钟部署,体验119语种向量化 1. 认识Qwen3-Embedding-4B 1.1 什么是文本向量化? 想象你走进一家大型图书馆,面对成千上万本书籍。如果让你手动查找与"人工智能"相关的书籍,你…...
Android Qcom USB Driver学习(十):Type-C充电管理与ADSP电源架构深度解析
1. Type-C充电管理在高通平台的核心架构 高通平台的Type-C充电管理采用分层设计,最上层是Generic TypeC Driver PowerSupply Framework,作为Linux内核与硬件之间的抽象层。这个框架负责统一管理充电策略、电源角色切换和状态上报。中间层通过Glink通信协…...
ChatGPT、Claude、Gemini大模型实战对比:哪个更适合你的业务场景?
ChatGPT、Claude、Gemini大模型实战对比:哪个更适合你的业务场景? 当企业面临AI大模型选型时,往往陷入技术参数的海洋却难以找到业务适配的答案。本文将从真实业务需求出发,通过客服对话、内容创作、数据分析三个典型场景的实测数…...
工业能量:05.UPS如何救场(啤酒厂断电救命案例)
05.UPS如何救场(啤酒厂断电救命案例) 在工厂里,最昂贵的不是设备,而是“停机一秒的代价”。 前四期咱们把开关电源、浪涌、冗余聊了个遍,今天终于轮到大救星——UPS出场了!直接上个真事儿,啤酒厂的,让你们听完直呼“原来它这么猛”! 你以为啤酒厂停电就是灯黑了,大家…...
终极视频硬字幕提取指南:本地OCR识别87种语言的完整解决方案
终极视频硬字幕提取指南:本地OCR识别87种语言的完整解决方案 【免费下载链接】video-subtitle-extractor 视频硬字幕提取,生成srt文件。无需申请第三方API,本地实现文本识别。基于深度学习的视频字幕提取框架,包含字幕区域检测、字…...
DeEAR镜像免配置实战:无需修改config.py,直接运行app.py启用全部功能模块
DeEAR镜像免配置实战:无需修改config.py,直接运行app.py启用全部功能模块 1. 开篇:语音情感识别的技术革新 语音情感识别技术正在改变我们与机器交互的方式。想象一下,你的智能助手不仅能听懂你说什么,还能理解你说话…...
Z-Image-Turbo-辉夜巫女完整指南:模型文件结构解析、LoRA注入位置与安全校验
Z-Image-Turbo-辉夜巫女完整指南:模型文件结构解析、LoRA注入位置与安全校验 1. 模型简介与部署准备 Z-Image-Turbo-辉夜巫女是基于Z-Image-Turbo模型的LoRA变体,专门针对生成日系动漫风格"辉夜巫女"角色图像进行了优化。该模型通过Xinferen…...
Open Interpreter实时流处理:Kafka消费脚本部署案例
Open Interpreter实时流处理:Kafka消费脚本部署案例 1. 项目背景与需求场景 在实际的数据处理项目中,我们经常需要处理实时数据流。想象一下这样的场景:你的电商平台每秒钟产生成千上万的用户行为数据,这些数据通过Kafka消息队列…...
