Apache Log4j 2
目录
1. Apache Log4j 2 简介
1.1 什么是Log4j 2?
1.2 Log4j 2 的主要特性
2. Log4j 2 的核心组件
2.1 Logger
2.2 Appender
2.3 Layout
2.4 Filter
2.5 Configuration
3. Log4j 2 的配置
4. Log4j 2 的使用示例
4.1 Maven 依赖
4.2 示例代码
4.3 输出结果
5. 高级功能
5.1 异步日志记录
5.2 日志过滤
5.3 JSON 日志格式
6. 总结
7. 参考资料
前言
在现代软件开发中,日志记录是确保系统可维护性、可调试性和安全性的重要组成部分。Apache Log4j 2 是一个功能强大、高性能的日志记录框架,广泛应用于Java应用程序中。本文将深入解析Apache Log4j 2的技术细节,包括其核心特性、配置方式、高级功能以及示例代码和输出结果。
1. Apache Log4j 2 简介
1.1 什么是Log4j 2?
Apache Log4j 2 是 Apache Log4j 的升级版本,是一个基于Java的日志记录工具。它提供了更高的性能、更灵活的配置以及更强大的功能,适用于各种规模的应用程序。
1.2 Log4j 2 的主要特性
- 高性能:Log4j 2 在日志记录性能上显著优于 Log4j 1.x 和 java.util.logging。
- 异步日志记录:支持异步日志记录,减少日志记录对应用程序性能的影响。
- 灵活的配置:支持 XML、JSON、YAML 和 properties 等多种配置文件格式。
- 插件架构:通过插件机制,可以轻松扩展 Log4j 2 的功能。
- 日志过滤:支持基于条件、正则表达式等多种方式的日志过滤。
- 日志路由:可以根据日志级别、日志内容等条件将日志路由到不同的输出目标。
2. Log4j 2 的核心组件
2.1 Logger
Logger 是 Log4j 2 的核心组件,用于记录日志消息。每个 Logger 都有一个名称,用于标识日志的来源。
2.2 Appender
Appender 用于定义日志输出的目的地,例如控制台、文件、数据库等。
2.3 Layout
Layout 用于定义日志输出的格式,例如 JSON、XML、文本等。
2.4 Filter
Filter 用于根据条件过滤日志记录,例如日志级别、日志内容等。
2.5 Configuration
Configuration 用于定义 Log4j 2 的整体配置,包括 Logger、Appender、Layout 和 Filter 等组件的配置。
3. Log4j 2 的配置
Log4j 2 支持多种配置文件格式,以下是一个基于 XML 的示例配置:
log4j2.xml:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN"><Appenders><!-- 控制台输出 --><Console name="Console" target="SYSTEM_OUT"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %msg%n" /></Console><!-- 文件输出 --><File name="File" fileName="logs/app.log"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %msg%n" /></File></Appenders><Loggers><Root level="debug"><AppenderRef ref="Console" /><AppenderRef ref="File" /></Root></Loggers>
</Configuration>
4. Log4j 2 的使用示例
4.1 Maven 依赖
首先,在 pom.xml 中添加 Log4j 2 的依赖:
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.20.0</version>
</dependency>
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-api</artifactId><version>2.20.0</version>
</dependency>
4.2 示例代码
以下是一个使用 Log4j 2 的简单示例:
Log4j2Example.java:
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class Log4j2Example {private static final Logger logger = LogManager.getLogger(Log4j2Example.class);public static void main(String[] args) {logger.trace("This is a trace message.");logger.debug("This is a debug message.");logger.info("This is an info message.");logger.warn("This is a warn message.");logger.error("This is an error message.");logger.fatal("This is a fatal message.");}
}
4.3 输出结果
根据配置文件 log4j2.xml,日志将同时输出到控制台和文件 logs/app.log 中。控制台输出如下:
2023-10-15 12:34:56 DEBUG Log4j2Example:10 - This is a debug message.
2023-10-15 12:34:56 INFO  Log4j2Example:11 - This is an info message.
2023-10-15 12:34:56 WARN  Log4j2Example:12 - This is a warn message.
2023-10-15 12:34:56 ERROR Log4j2Example:13 - This is an error message.
2023-10-15 12:34:56 FATAL Log4j2Example:14 - This is a fatal message.
文件 logs/app.log 中的输出与上述内容一致。
5. 高级功能
5.1 异步日志记录
Log4j 2 支持异步日志记录,可以通过以下方式启用:
AsyncLogger 配置:
<Configuration status="WARN"><Appenders><File name="File" fileName="logs/app.log"><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %msg%n" /></File></Appenders><Loggers><AsyncLogger name="com.example" level="debug"><AppenderRef ref="File" /></AsyncLogger><Root level="debug"><AppenderRef ref="File" /></Root></Loggers>
</Configuration>
5.2 日志过滤
可以通过 Filter 对日志进行过滤,例如只记录特定级别的日志:
日志过滤配置:
<Console name="Console" target="SYSTEM_OUT"><ThresholdFilter level="error" onMatch="ACCEPT" onMismatch="DENY"/><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %msg%n" />
</Console>
5.3 JSON 日志格式
可以通过 JsonLayout 将日志输出为 JSON 格式:
JSON 日志配置:
<Console name="Console" target="SYSTEM_OUT"><JsonLayout complete="true" compact="false"/>
</Console>
6. 总结
Apache Log4j 2 是一个功能强大、高性能的日志记录框架,适用于各种规模的 Java 应用程序。通过灵活的配置和强大的功能,Log4j 2 能够满足复杂的日志记录需求。本文详细介绍了 Log4j 2 的核心组件、配置方式、高级功能以及示例代码和输出结果,希望能够帮助您更好地理解和应用 Log4j 2。
7. 参考资料
- Apache Log4j 2 官方文档
- Log4j 2 GitHub 仓库
相关文章:
Apache Log4j 2
目录 1. Apache Log4j 2 简介 1.1 什么是Log4j 2? 1.2 Log4j 2 的主要特性 2. Log4j 2 的核心组件 2.1 Logger 2.2 Appender 2.3 Layout 2.4 Filter 2.5 Configuration 3. Log4j 2 的配置 4. Log4j 2 的使用示例 4.1 Maven 依赖 4.2 示例代码 4.3 输出…...
 
4.2.2 ArrayList类
ArrayList类与List类的用法差不多,提供的方法也差不多。但是与List不同的是,ArrayList可以包含任意类型的数据,但是相应的,要使用包含的数据,就必须对数据做相应的装箱和拆箱(关于装箱和拆箱,请…...
L1-088 静静的推荐
L1-088 静静的推荐 - 团体程序设计天梯赛-练习集 (pintia.cn) 题解 这里代码很简单,但是主要是循环里面的内容很难理解,下面是关于循环里面的内容理解: 这里 n 10 表示有 10 个学生,k 2 表示企业接受 2 批次的推荐名单&#…...
 
普及听力保健知识竞赛
普及听力保健知识竞赛 热点指数:★★★ 日期:3月3日 关键词:爱耳护耳、听力健康、耳部保健、听力科普 适合行业:医疗健康、健康护理、教育培训、公益组织 推荐功能:答题、H5宣传 宣传方向:广泛普及听力…...
小结: IGMP协议
IGMP(Internet Group Management Protocol)协议详解 IGMP(Internet Group Management Protocol)是IPv4 组播(Multicast)通信的控制协议,主要用于主机和路由器之间的组播成员管理。IGMP 允许主机…...
 
Dify 本地部署教程
目录 一、下载安装包 二、修改配置 三、启动容器 四、访问 Dify 五、总结 本篇文章主要记录 Dify 本地部署过程,有问题欢迎交流~ 一、下载安装包 从 Github 仓库下载最新稳定版软件包,点击下载~,当然也可以克隆仓库或者从仓库里直接下载zip源码包。 目前最新版本是V…...
ConcurrentHashMap从源码总结使用注意事项(源码)
ConcurrentHashMap实现原理 目录 ConcurrentHashMap实现原理核心源码解读(1)数据结构: 采用数组链表/红黑树(2)初始化(3)并发扩容(4)put 操作流程(5)计数 siz…...
 
前端 UI 框架发展史
上一小节我们了解了前端 UI 框架的作用和意义,接下来我们再来了解前端 UI 框架的发展历史。 虽然是讲历史,但我不想讲得太复杂,也不打算搞什么编年史记录啥的,毕竟我们不是来学历史的。 我会简单描述一下前端 UI 框架的发展历程…...
 
【工控】线扫相机小结 第五篇
背景介绍 线扫相机通过光栅尺的脉冲触发, 我在调试线扫过程中,发现图像被拉伸,预设调节分配器。图像正常后,我提高的相机的扫描速度(Y轴动的更快了)。 动的更快的发现,图像变短了(以…...
 
AI与SEO关键词智能解析
内容概要 人工智能技术正重塑搜索引擎优化的底层逻辑,其核心突破体现在关键词解析维度的结构性升级。通过机器学习算法对海量搜索数据的动态学习,AI不仅能够识别传统TF-IDF模型中的高频词汇,更能捕捉语义网络中隐含的关联特征。下表展示了传…...
 
STM32---FreeRTOS消息队列
一、简介 1、队列简介: 队列:是任务到任务,任务到中断、中断到任务数据交流的一种机制(消息传递)。 FreeRTOS基于队列,实现了多种功能,其中包括队列集、互斥信号量、计数型信号量、二值信号量…...
 
开关模式电源转换器 EMI/EMC 的集成仿真
介绍 在电力电子领域,电磁干扰 (EMI) 和电磁兼容性 (EMC) 问题可以决定设计的成败。开关模式电源转换器虽然高效且紧凑,但却是电磁噪声的常见来源,可能会对附近的组件和系统造成严重破坏。随着…...
Java虚拟机之垃圾收集(一)
目录 一、如何判定对象“生死”? 1. 引用计数算法(理论参考) 2. 可达性分析算法(JVM 实际使用) 3. 对象的“缓刑”机制 二、引用类型与回收策略 三、何时触发垃圾回收? 1. 分代回收策略 2. 手动触发…...
linux---天气爬虫
代码概述 这段代码实现了一个天气查询系统,支持实时天气、未来天气和历史天气查询。用户可以通过终端菜单选择查询类型,并输入城市名称来获取相应的天气信息。程序通过 TCP 连接发送 HTTP 请求,并解析返回的 JSON 数据来展示天气信息。 #in…...
 
字节顺序(大小端序)
在弄明白字节顺序之前先了解一下一些基础概念. 基础概念 字节(byte): 字节是计算机中数据处理的基本单位,通常由8个位组成,即1字节等于8位。一个字节可以存储一个ASCII码,两个字节可以存放一个汉字国标…...
可复用的 Vue 轮播图组件
大家好,今天我想和大家分享一下如何开发一个通用的 Vue 轮播图组件。轮播图在各种网站中都很常见,无论是展示产品、活动还是文章,都能派上用场。我们今天要实现的这个组件会具备良好的可配置性和易用性,同时保证代码的可维护性。 …...
 
AI编程: 一个案例对比CPU和GPU在深度学习方面的性能差异
背景 字节跳动正式发布中国首个AI原生集成开发环境工具(AI IDE)——AI编程工具Trae国内版。 该工具模型搭载doubao-1.5-pro,支持切换满血版DeepSeek R1&V3, 可以帮助各阶段开发者与AI流畅协作,更快、更高质量地完…...
 
Linux红帽:RHCSA认证知识讲解(五)从红帽和 DNF 软件仓库下载、安装、更新和管理软件包
Linux红帽:RHCSA认证知识讲解(五)从红帽和 DNF 软件仓库下载、安装、更新和管理软件包 前言一、DNF 软件包管理基础1.1 核心操作命令安装软件包卸载软件包重新安装软件包 1.2 软件仓库原理 二、配置自定义软件仓库步骤 1:清理默认…...
云上特权凭证攻防启示录:从根账号AK泄露到安全体系升级的深度实践
事件全景:一场持续17分钟的云上攻防战 2025年3月9日15:39,阿里云ActionTrail日志突现异常波纹——根账号acs:ram::123456789:root(已脱敏)从立陶宛IP(164.92.91.227)发起高危操作。攻击者利用泄露的AccessKey(AK)在17分钟内完成侦察→提权→持久化攻击链,完整操作序列…...
从3b1b到课堂:教育3D化的理想与现实鸿沟
从3b1b到课堂:教育3D化的理想与现实鸿沟 3Blue1Brown(3b1b)凭借精妙的三维动画与直观的知识可视化,重新定义了数学教育的可能性。然而,当前教育实践中,3D技术的渗透仍显不足,多数课堂停留在平面…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
 
idea大量爆红问题解决
问题描述 在学习和工作中,idea是程序员不可缺少的一个工具,但是突然在有些时候就会出现大量爆红的问题,发现无法跳转,无论是关机重启或者是替换root都无法解决 就是如上所展示的问题,但是程序依然可以启动。 问题解决…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
 
简易版抽奖活动的设计技术方案
1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
 
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
 
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
 
【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
Java线上CPU飙高问题排查全指南
一、引言 在Java应用的线上运行环境中,CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时,通常会导致应用响应缓慢,甚至服务不可用,严重影响用户体验和业务运行。因此,掌握一套科学有效的CPU飙高问题排查方法&…...
