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 仓库

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/31546.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

固定表头、首列 —— uniapp、vue 项目

项目实地&#xff1a;也可以在 【微信小程序】搜索体验&#xff1a;xny.handbook 另一个体验项目&#xff1a;官网 一、效果展示 二、代码展示 &#xff08;1&#xff09;html 部分 <view class"table"><view class"tr"><view class&quo…

微服务——网关、网关登录校验、OpenFeign传递共享信息、Nacos共享配置以及热更新、动态路由

之前学习了Nacos&#xff0c;用于发现并注册、管理项目里所有的微服务&#xff0c;而OpenFeign简化微服务之间的通信&#xff0c;而为了使得前端可以使用微服务项目里的每一个微服务的接口&#xff0c;就应该将所有微服务的接口管理起来方便前端调用&#xff0c;所以有了网关。…

[免费]微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端+Vue管理端)(高级版)【论文+源码+SQL脚本】

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版)&#xff0c;分享下哈。 项目视频演示 【免费】微信小程序(图书馆)自习室座位预约管理系统(SpringBoot后端Vue管理端)(高级版…

Android15请求动态申请存储权限完整示例

效果: 1.修改AndroidManifest.xml增加如下内容: <uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-perm

深度学习系列79:Text2sql调研

参考 https://github.com/topics/text-to-sql 这里是一些资源&#xff1a;https://github.com/eosphoros-ai/Awesome-Text2SQL/blob/main/README.zh.md 这里是综述文章&#xff1a;https://zhuanlan.zhihu.com/p/647249972 1. 数据集 Spider: 一个跨域的复杂text2sql数据集&a…

Deepseek应用技巧-chatbox搭建前端问答

目标&#xff1a;书接上回&#xff0c;由于本地私有化部署了deepseek的大模型&#xff0c;那怎么能够投入生产呢&#xff0c;那就必须有一个前端的应用界面&#xff0c;好在已经有很多的前人已经帮我们把前段应用给搭建好了&#xff0c;我们使用就可以啦&#xff0c;今天我们就…

Bootstrap:图标库的安装及其使用

一、安装 使用npm包管理器安装。 npm i bootstrap-icons 二、使用图标 首先先引入bootstrap-icons.css库&#xff0c;然后从官方网站选择想要的图标然后复制使用代码。 示例代码&#xff1a;使用vue引入对应css文件后&#xff0c;使用库图标。 <script setup>import &qu…

Linux网络之数据链路层协议

目录 数据链路层 MAC地址与IP地址 数据帧 ARP协议 NAT技术 代理服务器 正向代理 反向代理 上期我们学习了网络层中的相关协议&#xff0c;为IP协议。IP协议通过报头中的目的IP地址告知了数据最终要传送的目的主机的IP地址&#xff0c;从而指引了数据在网络中的一步…

TCP7680端口是什么服务

WAF上看到有好多tcp7680端口的访问信息 于是上网搜索了一下&#xff0c;确认TCP7680端口是Windows系统更新“传递优化”功能的服务端口&#xff0c;个人理解应该是Windows利用这个TCP7680端口&#xff0c;直接从内网已经具备更新包的主机上共享下载该升级包&#xff0c;无需从微…

“量子心灵AI“的监控仪表盘 - javascript网页设计案例

【前端实战】基于Three.js和Chart.js打造未来科技风AI监控仪表盘 本文通过AI辅助开发&#xff0c;详细记录了一个高级前端项目的完整实现过程。文章包含核心代码片段、技术要点及遇到的问题与解决方案。适合有一定前端基础的开发者学习参考。 1. 项目概述 本文详细介绍了一个名…

vtkDepthSortPolyData 根据相机视图方向对多边形数据进行排序

1. 作用 在 3D 渲染中&#xff0c;透明对象的渲染顺序非常重要。如果透明对象的渲染顺序不正确&#xff0c;可能会导致错误的视觉效果&#xff08;例如&#xff0c;远处的透明对象遮挡了近处的透明对象&#xff09;。vtkDepthSortPolyData 通过对多边形数据进行深度排序&#…

第十五章:go package 包的管理

import f "fmt"   // 注意 这里 f 是包的别名 init初始化函数 在每一个Go源文件中&#xff0c;都可以定义任意个如下格式的特殊函数&#xff1a; func init(){// ... } package&#xff1a;声明包的关键字 packagename&#xff1a;包名&#xff0c;可以不与文…

【从零开始学习计算机科学】计算机组成原理(七)存储器与存储器系统

【从零开始学习计算机科学】计算机组成原理(七)存储器与存储器系统 存储器存储器相关概念存储器分类存储器系统存储器性能指标存储器层次概述程序访问的局部性原理SRAM存储器存储器的读写周期DRAM存储器DRAM控制器高性能的主存储器存储器扩展只读存储器ROM光擦可编程只读存储…

开源!速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器

开源&#xff01;速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器 目录 开源&#xff01;速度100Kb/s的有线和无线双模ESP32S3芯片的DAP-Link调试器本项目未经授权&#xff0c;禁止商用&#xff01;本项目未经授权&#xff0c;禁止商用&#xff01;本项目未经授权&…

20250212:linux系统DNS解析卡顿5秒的bug

问题: 1:人脸离线识别记录可以正常上传云端 2:人脸在线识别请求却一直超时 3:客户使用在线网络 思路:

爱普生温补晶振 TG5032CFN高精度稳定时钟的典范

在科技日新月异的当下&#xff0c;众多领域对时钟信号的稳定性与精准度提出了极为严苛的要求。爱普生温补晶振TG5032CFN是一款高稳定性温度补偿晶体振荡器&#xff08;TCXO&#xff09;。该器件通过内置温度补偿电路&#xff0c;有效抑制环境温度变化对频率稳定性的影响&#x…

【病毒分析】熊猫烧香病毒分析及其查杀修复

目录 前言 一、样本概况 1.1 样本信息 1.2 测试环境及工具 1.3 分析目标 二、具体行为分析 2.1 主要行为 2.1.1 恶意程序对用户造成的危害 2.2 恶意代码分析 2.2.1 加固后的恶意代码树结构图(是否有加固) 2.2.2 恶意程序的代码分析片段 三、解决方案(或总结) 3.1 …

JavaWeb后端基础(7)AOP

AOP是Spring框架的核心之一&#xff0c;那什么是AOP&#xff1f;AOP&#xff1a;Aspect Oriented Programming&#xff08;面向切面编程、面向方面编程&#xff09;&#xff0c;其实说白了&#xff0c;面向切面编程就是面向特定方法编程。AOP是一种思想&#xff0c;而在Spring框…

AutoDL平台租借GPU,创建transformers环境,使用VSCode SSH登录

AutoDL平台租借GPU&#xff0c;创建transformers环境&#xff0c;使用VSCode SSH登录 一、AutoDl平台租用GPU 1.注册并登录AutoDl官网&#xff1a;https://www.autodl.com/home 2.选择算力市场&#xff0c;找到需要的GPU&#xff1a; 我这里选择3090显卡 3.这里我们就选择P…

三维建模与视频融合(3D-Video Integration)技术初探。

三维建模与视频融合&#xff08;3D-Video Integration&#xff09;是一种将虚拟三维模型无缝嵌入实拍视频场景的技术&#xff0c;广泛应用于影视特效、增强现实&#xff08;AR&#xff09;、游戏开发、广告制作 、视频监控 等领域。 一、技术核心流程 三维建模与动画 使用工具…