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

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&#xff1f; 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类的用法差不多&#xff0c;提供的方法也差不多。但是与List不同的是&#xff0c;ArrayList可以包含任意类型的数据&#xff0c;但是相应的&#xff0c;要使用包含的数据&#xff0c;就必须对数据做相应的装箱和拆箱&#xff08;关于装箱和拆箱&#xff0c;请…...

L1-088 静静的推荐

L1-088 静静的推荐 - 团体程序设计天梯赛-练习集 (pintia.cn) 题解 这里代码很简单&#xff0c;但是主要是循环里面的内容很难理解&#xff0c;下面是关于循环里面的内容理解&#xff1a; 这里 n 10 表示有 10 个学生&#xff0c;k 2 表示企业接受 2 批次的推荐名单&#…...

普及听力保健知识竞赛

普及听力保健知识竞赛 热点指数&#xff1a;★★★ 日期&#xff1a;3月3日 关键词&#xff1a;爱耳护耳、听力健康、耳部保健、听力科普 适合行业&#xff1a;医疗健康、健康护理、教育培训、公益组织 推荐功能&#xff1a;答题、H5宣传 宣传方向&#xff1a;广泛普及听力…...

小结: IGMP协议

IGMP&#xff08;Internet Group Management Protocol&#xff09;协议详解 IGMP&#xff08;Internet Group Management Protocol&#xff09;是IPv4 组播&#xff08;Multicast&#xff09;通信的控制协议&#xff0c;主要用于主机和路由器之间的组播成员管理。IGMP 允许主机…...

Dify 本地部署教程

目录 一、下载安装包 二、修改配置 三、启动容器 四、访问 Dify 五、总结 本篇文章主要记录 Dify 本地部署过程,有问题欢迎交流~ 一、下载安装包 从 Github 仓库下载最新稳定版软件包,点击下载~,当然也可以克隆仓库或者从仓库里直接下载zip源码包。 目前最新版本是V…...

ConcurrentHashMap从源码总结使用注意事项(源码)

ConcurrentHashMap实现原理 目录 ConcurrentHashMap实现原理核心源码解读&#xff08;1&#xff09;数据结构: 采用数组链表/红黑树&#xff08;2&#xff09;初始化&#xff08;3&#xff09;并发扩容&#xff08;4&#xff09;put 操作流程&#xff08;5&#xff09;计数 siz…...

前端 UI 框架发展史

上一小节我们了解了前端 UI 框架的作用和意义&#xff0c;接下来我们再来了解前端 UI 框架的发展历史。 虽然是讲历史&#xff0c;但我不想讲得太复杂&#xff0c;也不打算搞什么编年史记录啥的&#xff0c;毕竟我们不是来学历史的。 我会简单描述一下前端 UI 框架的发展历程…...

【工控】线扫相机小结 第五篇

背景介绍 线扫相机通过光栅尺的脉冲触发&#xff0c; 我在调试线扫过程中&#xff0c;发现图像被拉伸&#xff0c;预设调节分配器。图像正常后&#xff0c;我提高的相机的扫描速度&#xff08;Y轴动的更快了&#xff09;。 动的更快的发现&#xff0c;图像变短了&#xff08;以…...

AI与SEO关键词智能解析

内容概要 人工智能技术正重塑搜索引擎优化的底层逻辑&#xff0c;其核心突破体现在关键词解析维度的结构性升级。通过机器学习算法对海量搜索数据的动态学习&#xff0c;AI不仅能够识别传统TF-IDF模型中的高频词汇&#xff0c;更能捕捉语义网络中隐含的关联特征。下表展示了传…...

STM32---FreeRTOS消息队列

一、简介 1、队列简介&#xff1a; 队列&#xff1a;是任务到任务&#xff0c;任务到中断、中断到任务数据交流的一种机制&#xff08;消息传递&#xff09;。 FreeRTOS基于队列&#xff0c;实现了多种功能&#xff0c;其中包括队列集、互斥信号量、计数型信号量、二值信号量…...

开关模式电源转换器 EMI/EMC 的集成仿真

介绍 在电力电子领域&#xff0c;电磁干扰 &#xff08;EMI&#xff09; 和电磁兼容性 &#xff08;EMC&#xff09; 问题可以决定设计的成败。开关模式电源转换器虽然高效且紧凑&#xff0c;但却是电磁噪声的常见来源&#xff0c;可能会对附近的组件和系统造成严重破坏。随着…...

Java虚拟机之垃圾收集(一)

目录 一、如何判定对象“生死”&#xff1f; 1. 引用计数算法&#xff08;理论参考&#xff09; 2. 可达性分析算法&#xff08;JVM 实际使用&#xff09; 3. 对象的“缓刑”机制 二、引用类型与回收策略 三、何时触发垃圾回收&#xff1f; 1. 分代回收策略 2. 手动触发…...

linux---天气爬虫

代码概述 这段代码实现了一个天气查询系统&#xff0c;支持实时天气、未来天气和历史天气查询。用户可以通过终端菜单选择查询类型&#xff0c;并输入城市名称来获取相应的天气信息。程序通过 TCP 连接发送 HTTP 请求&#xff0c;并解析返回的 JSON 数据来展示天气信息。 #in…...

字节顺序(大小端序)

在弄明白字节顺序之前先了解一下一些基础概念. 基础概念 字节&#xff08;byte&#xff09;‌&#xff1a; 字节是计算机中数据处理的基本单位&#xff0c;通常由8个位组成&#xff0c;即1字节等于8位。一个字节可以存储一个ASCII码&#xff0c;两个字节可以存放一个汉字国标…...

可复用的 Vue 轮播图组件

大家好&#xff0c;今天我想和大家分享一下如何开发一个通用的 Vue 轮播图组件。轮播图在各种网站中都很常见&#xff0c;无论是展示产品、活动还是文章&#xff0c;都能派上用场。我们今天要实现的这个组件会具备良好的可配置性和易用性&#xff0c;同时保证代码的可维护性。 …...

AI编程: 一个案例对比CPU和GPU在深度学习方面的性能差异

背景 字节跳动正式发布中国首个AI原生集成开发环境工具&#xff08;AI IDE&#xff09;——AI编程工具Trae国内版。 该工具模型搭载doubao-1.5-pro&#xff0c;支持切换满血版DeepSeek R1&V3&#xff0c; 可以帮助各阶段开发者与AI流畅协作&#xff0c;更快、更高质量地完…...

Linux红帽:RHCSA认证知识讲解(五)从红帽和 DNF 软件仓库下载、安装、更新和管理软件包

Linux红帽&#xff1a;RHCSA认证知识讲解&#xff08;五&#xff09;从红帽和 DNF 软件仓库下载、安装、更新和管理软件包 前言一、DNF 软件包管理基础1.1 核心操作命令安装软件包卸载软件包重新安装软件包 1.2 软件仓库原理 二、配置自定义软件仓库步骤 1&#xff1a;清理默认…...

云上特权凭证攻防启示录:从根账号AK泄露到安全体系升级的深度实践

事件全景:一场持续17分钟的云上攻防战 2025年3月9日15:39,阿里云ActionTrail日志突现异常波纹——根账号acs:ram::123456789:root(已脱敏)从立陶宛IP(164.92.91.227)发起高危操作。攻击者利用泄露的AccessKey(AK)在17分钟内完成侦察→提权→持久化攻击链,完整操作序列…...

从3b1b到课堂:教育3D化的理想与现实鸿沟

从3b1b到课堂&#xff1a;教育3D化的理想与现实鸿沟 3Blue1Brown&#xff08;3b1b&#xff09;凭借精妙的三维动画与直观的知识可视化&#xff0c;重新定义了数学教育的可能性。然而&#xff0c;当前教育实践中&#xff0c;3D技术的渗透仍显不足&#xff0c;多数课堂停留在平面…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

ssc377d修改flash分区大小

1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

CentOS下的分布式内存计算Spark环境部署

一、Spark 核心架构与应用场景 1.1 分布式计算引擎的核心优势 Spark 是基于内存的分布式计算框架&#xff0c;相比 MapReduce 具有以下核心优势&#xff1a; 内存计算&#xff1a;数据可常驻内存&#xff0c;迭代计算性能提升 10-100 倍&#xff08;文档段落&#xff1a;3-79…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...