log4j2 HTTP请求日志异步

Log4j2全局logId链路追踪:从MDC到跨服务传递的完整实践 在分布式系统和复杂单体应用中,日志的可观测性是保障系统稳定性的关键。日志链路追踪的核心原理是为每个请求分配一个全局唯一的标识符(如logId),通过线程上下文(如MDC)进行存储和传递,使得分散在不同模块、服务甚至异步任务中的日志能够被高效关联。这项技术的核心价值在于大幅提升线上问题排查、性能分析和用户行为追踪的效率。在Java生态中,Log4j2作为主流的日志框架,通过其ThreadContext(MDC的实现)和PatternLayout的%X占位符,可以无缝集成logId的自动打印。典型的应用场景包括 阅读详情

1、首先maven项目加入依赖包

<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.9.0</version>
</dependency>
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-api</artifactId>
    <version>2.9.0</version>
</dependency>
<dependency>
    <groupId>com.lmax</groupId>
    <artifactId>disruptor</artifactId>
    <version>3.3.4</version>
</dependency>
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.9.0</version>
</dependency>

2、进行log4j2.xml文件配置。

将配置文件log4j2.xml配置到classpath下面。以下是简单的xml配置。其中apperders元素配置了Http 其实调用的就是log4j2 core包下org.apache.logging.log4j.core.appender.HttpAppender这个处理类

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appenders>
        <Http name="Http" url="http://localhost:29010/compass/log">
            <JsonLayout properties="true"/>
        </Http>
    </appenders>

    <loggers>
        <!--logger 继承root  此配置是输出com.spring.mvc 下面的error及以上的日志到 RollingFile 项-->
        <!--additivity = true 则root日志也输出。false则不执行root日志-->
        <Logger name="com.spring.mvc" level="error" additivity="true">
            <AppenderRef ref="Http"/>
        </Logger>
    </loggers>
</configuration>

通过以上配置则实现了http日志请求。

3、properties配置文件实现异步

同样在classpath下面加入log4j2.component.properties配置文件添加以下配置

Log4jContextSelector=org.apache.logging.log4j.core.async.AsyncLoggerContextSelector

也可以在代码中将其加上系统配置如:

        System.setProperty("Log4jContextSelector","org.apache.logging.log4j.core.async.AsyncLoggerContextSelector");

以下是业务调用日志输出

private static Logger log=LogManager.getLogger(LogController.class);

@RequestMapping("/log")
String log() {

    log.info("info test");

    log.warn("warn test");

    log.error("error test");

    return "ok";
}

如果没有这个系统配置。业务当中调用的这个Logger对象将是
org.apache.logging.log4j.core.Logger
加上了这个系统配置则Logger对象是
org.apache.logging.log4j.core.async.AsyncLogger

4、日志信息

以下是日志服务器也就是log4j2.xm所配置的http://localhost:29010/compass/log这台日志服务所接收到的json日志

{
  "timeMillis" : 1507620120885,
  "thread" : "http-nio-8081-exec-2",
  "level" : "ERROR",
  "loggerName" : "com.spring.mvc.web.controller.LogController",
  "message" : "error test",
  "endOfBatch" : true,
  "parameterCount" : 0,
  "formattedMessage" : "error test",
  "loggerFqcn" : "org.apache.logging.log4j.spi.AbstractLogger",
  "threadPriority" : 5,
  "threadId" : 50,
  "contextMap" : { }
}
Log4j2介绍和使用 NULL 博文链接:https://ihenu.iteye.com/blog/2433090 立即下载

相关推荐

全栈开发指南:从前端到后端的全面掌握

全栈开发人员(Full Stack Developer)是指能够处理前端和后端开发工作的开发人员。他们需要掌握各种技术和工具,能够独立完成从需求分析、设计、开发到部署的整个流程。这篇博客将详细介绍全栈开发涉及的各个方面,为您提供从入门到进阶的指导。

Where there is a will, there is a way ! 3453

[slf4j-log4j2] 日志输出到HTTP接口

参考资料: https://logging.apache.org/log4j/2.x/manual/appenders.html#JDBCAppender 本内容基于:https://blog.youkuaiyun.com/master336/article/details/104746627 环境: Springboot:2.2.3.RELEASE 特殊依赖:org.springframework...

一只懂代码不懂人情世故的源码爱好猿 2667

从零搭建宝兰德BES单机版:分离式安装、环境变量配置到控制台访问的避坑指南

本文详细介绍了从零搭建宝兰德BES单机版的完整流程,包括分离式安装、环境变量配置和控制台访问的避坑指南。针对中间件安装部署中的常见问题,提供了账号规划、JDK配置、实例创建和防火墙设置等实用解决方案,帮助开发者和运维人员高效完成BES中间件的部署工作。

weixin_32576389的博客 375

Log4j2通过HttpAppender回传日志

Log4j2通过HttpAppender回传日志

qq_59809768的博客 745

wireshark抓包分析TCP协议和用Fiddler抓包Https分析

wireshark抓包分析TCP协议和用Fiddler抓包Https分析 1.实验说明: 以某种游戏的客户端连接服务器、断开服务器为例,用wireshark抓包分析TCP协议的三次握手连接、四次握手断开,与计算机网络原理进行验证;用Fiddler抓包,分析验证一个HTTPS网站的TCP连接过程 2.实验过程: wireshark实验: (1)实验准备:安装《洛克王国》游戏客户端, 运行洛克王国客户端,打开内存资源管理器查看PID 根据PID查看洛克王国服务端的IP地址和端口号 并打开命令行运行以下命令: n

qq_42032327的博客 1261

OpenWebUI外部模型配置异常排查与修复指南

本文详细解析了OpenWebUI外部模型配置异常的常见问题及解决方案,包括隐藏字符、数据库锁死等典型现象。通过错误日志分析和数据库修复实战指南,帮助开发者快速定位并解决配置问题,确保OpenWebUI与第三方大模型的稳定连接。

weixin_29205061的博客 314

Spring Boot中使用log4j实现http请求日志入mongodb

为什么我不完全主张自学?①平台上的大牛基本上都有很多年的工作经验了,你有没有想过之前行业的门槛是什么样的,现在行业门槛是什么样的?以前企业对于程序员能力要求没有这么高,甚至十多年前你只要会写个“Hello World”,你都可以入门这个行业,所以以前要入门是完全可以入门的。②现在也有一些优秀的年轻大牛,他们或许也是自学成才,但是他们一定是具备优秀的学习能力,优秀的自我管理能力(时间管理,静心坚持等方面)以及善于发现问题并总结问题。

2401_83916394的博客 773

刷爆 Java 基础!1000 道经典面试题精解第一篇【序列化】

自定义序列化 / 反序列化的实现方式在实现接口的类中,手动重写和方法在方法内优先调用执行默认序列化逻辑;追加自定义逻辑(如敏感数据加密、临时字段赋值、兼容旧版本数据等)。// 序列化ID,保证兼容性// 敏感字段,默认不序列化,自定义处理// 自定义序列化// 执行默认序列化:写入username// 自定义逻辑:密码加密后写入// 自定义反序列化// 执行默认反序列化:读取username// 自定义逻辑:读取加密密码并解密// 模拟加密/解密工具方法。

七叔的博客 192

Log4j Bug –减慢您的应用程序

最近,我们正在对流行的SaaS应用程序进行故障排除。 该应用程序间歇性地减慢了速度。 要从问题中恢复,必须重新启动应用程序。 在高流量期间,此应用有时会变慢; 有时在交通繁忙时也是如此。 没有凝聚力模式。 这种应用程序变慢并重新启动它持续了一段时间。 然后,我们开始解决问题。 我们发现了一些有趣的东西,以为您也可以从我们的发现中受益,因此撰写了本文。 技术栈 这个流行的SaaS应用程...

最佳 Java 编程 896

低照度与极端天气环境中的YOLOv8优化:CPA-Enhancer网络的应用与分析

为了克服上述问题,本文提出了一种名为的网络改进方案。CPA-Enhancer通过引入链式思考机制和改进的注意力机制,有效地提升了YOLOv8在低照度和复杂天气下的表现。本文提出了针对低照度和恶劣天气条件下目标检测的YOLOv8改进方案——CPA-Enhancer链式思考网络。通过引入低照度图像增强和多尺度特征融合技术,CPA-Enhancer显著提高了YOLOv8在低光照、雾霾、雨雪等环境下的检测性能。实验结果表明,CPA-Enhancer相较于原始YOLOv8,在多个指标上都有显著的提升,尤其是在mAP。

博客 1567

ESP32与BH1750光照传感器结合使用的Web服务器案例

请注意,为了使代码正常工作,你需要将代码中的"你的WiFi网络名称"和"你的WiFi网络密码"替换为你自己的WiFi网络凭据。在代码中,我们首先导入了所需的库文件,包括Wire库用于I2C通信,BH1750库用于与光照传感器通信,WiFi库和WebServer库用于创建Web服务器。接下来,我们将编写一个Arduino代码来控制ESP32与BH1750的通信,并将读取到的光照强度值显示在Web服务器上。函数用于处理根路径的请求,其中我们读取光照传感器的值,并将其显示在返回的HTML页面中。

server_api196的博客 618

springboot【20】日志管理之log4j实现http请求日志入mongodb

当我们在集群中部署应用之后,应用请求的日志被分散记录在了不同应用服务器的文件系统上,这样分散的存储并不利于我们对日志内容的检索。解决日志分散问题的方案多种多样,本文思路以扩展log4j实现将日志写入MongoDB。 准备工作         以springboot【19】日志管理之使用AOP统一处理Web请求日志 为基础,进行本功能的改造。该工程实现了一个简单的REST接口,一个对web层的切

Java Learning 1761

1 电科院FTU检测标准学习笔记-外观检查

作者简介:本人从事电力系统多年,岗位包含研发,测试,工程等,具有丰富的经验在配电自动化验收测试以及电科院测试中,本人全程参与,积累了不少现场的经验。

sixtome 1852

SpringBoot项目里OpenFeign日志怎么配才有效?手把手教你从Logback切换到Log4j2并打印完整HTTP请求

本文详细介绍了在SpringBoot项目中如何配置OpenFeign日志以打印完整HTTP请求,包括从Logback迁移到Log4j2的完整流程和实战配置。通过优化日志级别和格式,开发者可以高效调试微服务接口,提升问题排查效率。

weixin_30466039的博客 389

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

电商系统log4j2.xml最佳实践配置详解

比如订单模块的日志可以输出到order.log,支付模块的日志输出到payment.log。电商系统的日志量通常很大,我们需要合理的日志滚动策略来管理日志文件。这样在排查问题时,可以根据TraceID快速追踪一个请求在系统中的完整流转路径,大大简化了分布式系统的调试工作。我们可以配置AsyncLogger来实现异步日志记录,将日志写入操作放到单独的线程中执行,避免阻塞主业务流程。它内置了完善的开发环境,可以快速验证各种日志配置方案,还能一键部署你的电商系统进行真实环境测试。

SilvermistFalcon19的博客 826

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Logbook 完全指南:Java HTTP 请求响应日志记录的终极解决方案

Logbook 是一款功能强大的 Java 库,专为 HTTP 请求和响应日志记录而设计。它提供了简单易用且高度可扩展的方式,帮助开发者轻松实现对 HTTP 通信的全面监控与记录,是 Java 应用开发中不可或缺的日志工具。 ## 🚀 Logbook 的核心优势 Logbook 作为 Java HTTP 日志记录的终极解决方案,具有以下显著优势: ### 1. 简单高效的集成方式 Logb

gitblog_00783的博客 728

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

最简WebClient 同步、异步调用示例

WebClient是Spring WebFlux模块提供的一个非阻塞的基于响应式编程的进行Http请求的客户端工具,从Spring5.0开始WebClient作为RestTemplete的替代品,有更好的响应式能力,支持异步调用,可以在Springboot项目中实现网络请求。

爱码少年 00fly.online 的博客 2万+

MDC日志追踪

日志追踪 1.如何实现 问题 以及解决方案 初级 每层传参下去 从controller -> service -> dao 中级 通过threalocal 什么是threadlocal 为线程创建一个副本 是以线程号为id 的map 可以塞值 塞我们想要的 traceId 框架MDC MDC(Mapped Diagnostic Context,映射调试上下文)是 log4j 和 logback 提供的一种方便在多线程条件下记录日志的功能。 MDC中的put方法其实就是讲键值对放入

weixin_42899433的博客 775

待整理

1:HttpServletRequest获取请求头,参考HttpServletRequest、org.springframework.http.server.ServletServerHttpRequest源码 2:翻译Spring MVC 官方文档。 3:日志门面和日志实现 4:学习HTTP2 5:Spring MVC httpmessageconvert原理 6:log4j...

weixin_30722589的博客 68

RxJava在业务系统中的实践

在java的世界里由于大多数接口和API都是阻塞式的交互,进而影响到很多童靴的编程思想和编程习惯。因而,有一些专家讲java的编程模型是阻塞式模型(与Node.js区别大),不是没有道理的。从高性能的视角看,任何阻塞点都可能导致性能的退步。而响应式编程其天然就是非阻塞的,当数据准备完成后自动触发下一个动作而不是等待数据完成。这种思想再结合异步化编程使得我们在统一线程模型,降低多线程编程成本的同时提...

布道 964

常用日志框架Log4j,Logback,Log4j2性能比较与日志门面SLF4J简介

文章目录常用日志框架Log4jLogbackLog4j 2Log4j1/Logback/Log4j2性能比较日志门面SLF4J 常用日志框架 Log4j Log4j是Apache的一个Java的日志库,通过使用Log4j,我们可以控制日志信息输送的目的地(控制台、文件、数据库等);我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。 Logbac...

ThinkWon的博客 1万+

Log4j,Log4j2,logback,slf4j日志框架比较

常用日志框架简介 Log4j Log4j是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、数据库等;我们也可以控制每一条日志的输出格式;通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。 Log4j有7种不同的log级别,按照等级从低到高依次为:TRACE、DEBUG、INFO、WARN、ERROR、FATAL、OFF。如果配置为OFF级别,表示关闭log。 Log4j支持两种格式的配置文件:properties和xml。包含三个主要的

Damon_zqt的博客 1317

java常用日志框架日志门面及实现 SLF4J 、Jboss-logging 、JCL、Log4j、Logback、Log4j2、JUL,springboot集成 log4j、log4j2

一、java常用日志框架 1.日志门面(日志接口) ​ 日志门面来解决系统与日志实现框架的耦合性。不是一个真正的日志实现,而是一个抽象层( abstraction layer),它允许你在后台使用任意一个日志实现。 ​ 在项目开发中,记录日志时不应该直接调用日志实现层的方法,而应该调用日志门面(日志抽象层)的方法。 SLF4J(Simple Logging Facade for Java) ​ 简单日志门面(Simple Logging Facade For Java)

多云666 1951

日志门面slf4j与常用的日志框架Log4j,Logback和Log4j2

slf4j 是众多日志框架接口的集合(俗称日志门面),它不负责具体的日志实现,只在编译时负责寻找合适的日志框架进行绑定,各日志框架通过扩展jar包中的适配器与slf4j建立适配 SLF4J可以和Log4j、Logback、Log4j2、JUL等日志框架配合使用,这里主要讲一下常用的几种。Apache Log4j 2是对 Log4j 的升级,它比其前身 Log4j 1.x 提供了重大改进,并提供了 Logback 中可用的许多改进,同时修复了 Logback 架构中的一些固有问题。按出现顺序逐个分析一下。

weixin_42206151的博客 1254

log4j中调试与错误日志分开_Java日志框架与Log4j2详解

在项目开发中,都不可避免的使用到日志。没有日志虽然不会影响项目的正确运行,但是没有日志的项目可以说是不完整的。日志在调试,错误或者异常定位,数据分析中的作用是不言而喻的。日志作用调试在Java项目调试时,查看栈信息可以方便地知道当前程序的运行状态,输出的日志便于记录程序在之前的运行结果。如果你大量使用System.out或者System.err,这是一种最方便最有效的方法,但显得不够专业。错误定位...

weixin_39895684的博客 518
上一篇: ELK kibana安装
下一篇: Tesseract-OCR 入门
Psuso_
博客等级 码龄10年 11粉丝 27原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值