8.idea创建maven项目(使用Log4j日志记录框架+Log4j 介绍)

8.idea创建maven项目(使用Log4j日志记录框架+Log4j 介绍)

在 IntelliJ IDEA 的 Maven 项目中引入了 Log4j,并配置了日志同时输出到控制台和文件。
Log4j 提供了灵活的日志配置选项,可以根据项目需求调整日志级别、输出目标和格式。

1. 创建 Maven 项目

  1. 打开 IntelliJ IDEA。
  2. 选择 “File” > “New” > “Project…”。
  3. 选择 “Maven”,点击 “Next”。
  4. 填写 GroupId 和 ArtifactId,点击 “Next”。
  5. 确认项目位置,点击 “Finish”。

2. 添加 Log4j 依赖

在项目的 pom.xml 文件中添加 Log4j 2.x 依赖:
在这里插入图片描述

    <!-- 项目依赖 --><dependencies><!-- Log4j 2.x 依赖 --><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></dependencies>

3. 创建 Log4j 配置文件

src/main/resources 目录下创建 log4j2.xml 文件,配置 Log4j 的日志输出格式和级别:
在这里插入图片描述

<?xml version="1.0" encoding="UTF-8"?>
<!-- Log4j 2.x 配置文件这个文件定义了日志记录的行为,包括日志级别、输出目标、格式等。
-->
<Configuration status="WARN"><!-- <Configuration> 根元素- status: 设置 Log4j 自身的日志级别(如 WARN、ERROR 等)。用于调试 Log4j 自身的运行状态。--><Appenders><!-- <Appenders> 元素- 定义日志输出的目标(Appender)。- 可以配置多个 Appender(如控制台、文件、数据库等)。--><!-- 控制台输出 Appender --><Console name="Console" target="SYSTEM_OUT"><!-- <Console> 元素- name: Appender 的名称(用于在 Logger 中引用)。- target: 输出目标(SYSTEM_OUT 表示标准输出,即控制台)。--><!-- 日志格式化配置 --><PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/><!-- <PatternLayout> 元素- pattern: 定义日志消息的格式。- %d{HH:mm:ss.SSS}: 日期时间(时:分:秒.毫秒)。- [%t]: 线程名(中括号包裹)。- %-5level: 日志级别(左对齐,宽度为 5)。- %logger{36}: 日志记录器名称(最大长度为 36)。- %msg: 日志消息。- %n: 换行符。--></Console><!-- 文件输出 Appender --><File name="File" fileName="logs/app.log"><!-- <File> 元素- name: Appender 的名称(用于在 Logger 中引用)。- fileName: 指定日志文件的路径和名称。--><!-- 日志格式化配置 --><PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/><!-- <PatternLayout> 元素- pattern: 定义日志消息的格式。- %d{yyyy-MM-dd HH:mm:ss.SSS}: 日期时间(年-月-日 时:分:秒.毫秒)。- [%t]: 线程名(中括号包裹)。- %-5level: 日志级别(左对齐,宽度为 5)。- %logger{36}: 日志记录器名称(最大长度为 36)。- %msg: 日志消息。- %n: 换行符。--></File></Appenders><Loggers><!-- <Loggers> 元素- 定义日志记录器的配置(如日志级别、输出目标)。--><!-- 根日志记录器配置 --><Root level="info"><!-- <Root> 元素- level: 设置根日志记录器的日志级别(如 DEBUG、INFO、WARN、ERROR)。低于该级别的日志将不会被记录。--><!-- 引用 Appender --><AppenderRef ref="Console"/><AppenderRef ref="File"/><!-- <AppenderRef> 元素- ref: 引用之前定义的 Appender 的名称(如 "Console" 和 "File")。将日志输出到指定的 Appender。--></Root></Loggers>
</Configuration>

4. 编写示例代码

src/main/java 目录下创建一个 Java 类,使用 Log4j 记录日志:
在这里插入图片描述

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;public class App {// 获取 Logger 实例,用于记录日志private static final Logger logger = LogManager.getLogger(App.class);public static void main(String[] args) {// 记录 INFO 级别的日志logger.info("程序启动");try {// 示例:记录输入输出String input = "Hello, Log4j!";// 记录 DEBUG 级别的日志(只有 DEBUG 及以上级别的日志会被记录)logger.debug("输入内容: {}", input);String output = processInput(input);logger.debug("输出内容: {}", output);// 记录 INFO 级别的日志logger.info("程序运行正常");} catch (Exception e) {// 记录 ERROR 级别的日志,并附带异常信息logger.error("程序运行出错", e);}}// 示例方法:处理输入字符串private static String processInput(String input) {return input.toUpperCase();}
}

5. 运行程序

  1. 在 IntelliJ IDEA 中右键点击 App 类。
  2. 选择 “Run ‘App.main()’”.
  3. 程序运行后,日志会同时输出到控制台和文件 logs/app.log
5.1 由于log4j2.xml配置了记录级别≥info,所以控制台与文件,未记录debug级别的日志

在这里插入图片描述
在这里插入图片描述

5.2 修改log4j2.xml,配置为记录级别≥debug,查看运行结果,结果便记录了≥debug日志级别的日志

在这里插入图片描述

Log4j 介绍

1. Log4j 是什么?

Log4j 是一款功能强大、灵活且高性能的Java 日志记录框架,尤其是 Log4j 2.x 版本,解决了 Log4j 1.x 的许多问题,并提供了许多高级功能。它是许多大型 Java 项目的首选日志框架。然而,在使用时需要注意安全配置(如避免 Log4Shell 漏洞),并根据项目需求选择合适的日志级别和输出目标。它提供了灵活的日志记录功能,支持将日志输出到控制台、文件、数据库、网络等多种目标,并支持日志级别、格式化、过滤等高级功能。

2. Log4j 的主要版本
  • Log4j 1.x

    • 第一个稳定版本,功能强大但设计较老旧。
    • 已被官方标记为“结束生命周期”(EOL),不再维护。
    • 存在一些已知的安全漏洞(如 Log4Shell 漏洞)。
  • Log4j 2.x

    • 完全重写的版本,性能更高、功能更丰富。
    • 支持异步日志记录、Lambda 表达式、插件化架构等。
    • 是当前推荐使用的版本。
3. Log4j 的核心组件

Log4j 的架构主要由以下组件组成:

  1. Logger(日志记录器)

    • 用于记录日志消息的入口。
    • 通过类名或名称空间获取 Logger 实例(如 LogManager.getLogger(MyClass.class))。
    • 支持日志级别(如 DEBUGINFOWARNERROR)。
  2. Appender(输出目标)

    • 定义日志输出的目标(如控制台、文件、数据库、网络等)。
    • 常用 Appender:
      • ConsoleAppender:输出到控制台。
      • FileAppender / RollingFileAppender:输出到文件(支持滚动日志)。
      • SocketAppender:通过网络输出到远程服务器。
  3. Layout(日志格式化)

    • 定义日志消息的格式(如时间、线程名、日志级别、日志消息等)。
    • 常用 Layout:
      • PatternLayout:支持自定义格式(如 %d{yyyy-MM-dd HH:mm:ss} [%t] %-5level %logger{36} - %msg%n)。
      • JSONLayout:输出 JSON 格式的日志。
  4. Filter(过滤器)

    • 用于过滤日志消息(如根据日志级别、日志内容等)。
  5. Level(日志级别)

    • 定义日志的优先级,从低到高:
      • TRACE:调试细节。
      • DEBUG:调试信息。
      • INFO:一般信息。
      • WARN:警告信息。
      • ERROR:错误信息。
      • FATAL:严重错误。
4. Log4j 的工作原理
  1. 日志记录流程

    • 应用程序通过 Logger 实例调用日志方法(如 logger.info("message"))。
    • Log4j 根据日志级别和配置决定是否记录该消息。
    • 如果记录,消息会通过 Appender 输出到目标(如控制台、文件)。
    • 在输出前,可以通过 Layout 格式化消息。
  2. 配置方式

    • XML 配置:通过 log4j2.xml 文件配置。
    • Properties 配置:通过 log4j2.properties 文件配置。
    • 编程式配置:通过 Java 代码动态配置。
5. Log4j 的优势
  • 高性能
    • Log4j 2.x 支持异步日志记录,通过 LMAX Disruptor 库实现无锁队列,大幅提高日志记录性能。
  • 灵活性
    • 支持多种 Appender、Layout 和 Filter,可以轻松扩展。
  • 易用性
    • 提供简单的 API 和丰富的配置选项。
  • 可维护性
    • 日志级别和输出目标可以动态调整(无需重启应用)。
  • 安全性
    • Log4j 2.x 修复了 Log4j 1.x 中的安全漏洞(如 Log4Shell)。
6. Log4j 的安全注意事项
  • Log4Shell 漏洞
    • Log4j 1.x 和 Log4j 2.x 的早期版本存在严重的远程代码执行漏洞(CVE-2021-44228)。
    • 解决方案:
      • 升级到 Log4j 2.17.1 或更高版本。
      • 禁用 JNDI 查找(通过配置 log4j2.component.properties 或环境变量)。
  • 最小权限原则
    • 日志文件和配置文件的目录应设置适当的权限,防止未授权访问。

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

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

相关文章

【和春笋一起学C++】函数——C++的编程模块

目录 1. 原型句法 2. 函数分类 3. 函数参数之按值传递 4. 数组作为函数参数 在C中&#xff0c;要使用函数&#xff0c;必须要有这三个方面&#xff1a; 函数原型&#xff0c;函数原型描述了函数到编译器的接口&#xff0c;函数原型一般放在include文件中。函数原型告诉编译…

深挖Java基础之:认识Java(创立空间/先导:Java认识)

今天我要介绍的是在Java中对Java的一些基本语法的认识与他们的运用&#xff0c;以及拟举例子说明和运用场景&#xff0c;优势和劣势&#xff0c; 注&#xff1a;本篇文章是对Java的一些基本的&#xff0c;简单的代码块的一些内容&#xff0c;后续会讲解在Java中的变量类型&…

Python+Selenium+Pytest+Allure PO模式UI自动化框架

一、框架结构 allure-report&#xff1a;测试报告base&#xff1a;定位元素封装data&#xff1a;数据log&#xff1a;日志文件page&#xff1a;页面封装文件夹report&#xff1a;缓存报告testcases&#xff1a;测试用例层utils&#xff1a;工具类run.py&#xff1a;执行文件 二…

博物馆除湿控湿保卫战:M-5J1R 电解除湿科技如何重塑文物守护的未来

在卢浮宫幽深的长廊里&#xff0c;达芬奇的《蒙娜丽莎》正经历着一场看不见的战争——不是来自时间的侵蚀&#xff0c;而是空气中无形的水分子。每一件文物都在与湿度进行着无声的抗争&#xff0c;这场抗争关乎人类文明的延续。湿度&#xff0c;这个看不见的文物杀手&#xff0…

【嘉立创EDA】如何找到曲线和直线的交点,或找到弧线和直线的交点

文章路标👉 :one: 文章解决问题:two: 主题内容:three: 参考方法be end..1️⃣ 文章解决问题 操作环境:嘉立创EDA专业版 V2.2.38 本文使用嘉立创EDA,描述如何快速找到曲线和直线交点的方法,这里的曲线包括了弧线等。本文将此过程记录,以供有需要的读者参考。 2️⃣ 主题…

大语言模型能否替代心理治疗师的深度拓展研究:fou

大语言模型能否替代心理治疗师的深度拓展研究 在科技初创企业和研究领域,大型语言模型(LLMs)用于替代心理健康服务提供者的应用备受关注。但研究人员通过对主要医疗机构治疗指南的梳理回顾,并对当前 LLMs(如 gpt-4o)进行实验评估后发现,LLMs 存在对心理疾病患者表达污名…

【linux】Chrony服务器

简介 1.1 时间的重要性 由于 IT 系统中&#xff0c;准确的计时非常重要&#xff0c;有很多种原因需要准确计时&#xff1a; 在网络传输中&#xff0c;数据包括和日志需要准确的时间戳 各种应用程序中&#xff0c;如订单信息&#xff0c;交易信息等 都需要准确的时间戳 1.2 时区…

mysql查看哪些表的自增id已超过某个值

场景 想看哪些表数据比较大&#xff0c;如果用count 比较慢&#xff0c;同时表设计如果是自增&#xff0c;有没有办法一次查出自增id已超过某值的所有表呢。 方法 SELECT AUTO_INCREMENT,TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA 库名 AND AUTO_INCRE…

SiamMask原理详解:从SiamFC到SiamRPN++,再到多任务分支设计

SiamMask原理详解&#xff1a;从SiamFC到SiamRPN&#xff0c;再到多任务分支设计 一、引言二、SiamFC&#xff1a;目标跟踪的奠基者1. SiamFC的结构2. SiamFC的局限性 三、SiamRPN&#xff1a;引入Anchor机制的改进1. SiamRPN的创新2. SiamRPN的进一步优化 四、SiamMask&#x…

SpringBoot终极形态:AI生成带OAuth2鉴权的微服务模块(节省20人日)

在数字化转型的浪潮中,开发效率和质量是企业竞争力的关键要素。飞算 JavaAI 作为一款创新的 AI 工具,能在 Spring Boot 开发中,自动生成完整微服务模块,极大提升开发效率。下面,我们就详细介绍如何借助飞算 JavaAI,实现 Spring Boot 微服务模块的自动化生成。 飞算 JavaAI 简介…

Spring缓存注解深度实战:3大核心注解解锁高并发系统性能优化‌

引言&#xff1a;缓存——高并发系统的“性能加速器”‌ 在互联网应用中&#xff0c;数据库查询往往是性能瓶颈的核心。当每秒数千次的请求直接冲击数据库时&#xff0c;系统响应速度会急剧下降&#xff0c;甚至引发宕机风险。‌缓存技术‌应运而生&#xff0c;成为解决这一痛…

CSS元素动画篇:基于当前位置的变换动画(二)

基于当前位置的变换动画&#xff08;二&#xff09; 前言旋转效果类元素动画摇摆动画效果效果预览代码实现 摇晃动画效果效果预览代码实现 螺旋旋转效果预览代码实现 结语 前言 CSS元素动画一般分为两种&#xff1a;一种是元素基于当前位置的变换动画&#xff0c;通过不明显的…

Qt/C++开发监控GB28181系统/设备注册/设备注销/密码认证/心跳保活/校时

一、前言 根据gb28181协议文档&#xff0c;第一步就是需要实现设备的注册&#xff0c;和onvif不同&#xff0c;gb是反过来的&#xff0c;设备端主动连接服务端&#xff0c;而onvif是服务端主动发出搜索&#xff0c;设备被动应答&#xff0c;包括后续的交互几乎都是被动应答&am…

MATLAB 中的图形绘制

一、线图 plot 函数用来创建x和y值的简单线图。 x 0 : 0.05 : 30; %从0到30&#xff0c;每隔0.05取一次值 y sin(x); plot(x,y,LineWidth,2) %若&#xff08;x&#xff0c;y&#xff0c;LineWidth&#xff0c;2&#xff09;可变粗 xlabel("横轴标题") ylab…

go语言八股文(五)

1.go的局部变量是分配在栈上还是在堆上 在Go语言中&#xff0c;局部变量的内存分配&#xff08;栈或堆&#xff09;由编译器基于逃逸分析&#xff08;escape analysis&#xff09;来决定。以下是总结和具体示例&#xff1a; 栈上分配 当局部变量的生命周期严格限定在函数作用…

Gradients of Matrix-Matrix Multiplication in Deep Learning

Gradients of Matrix-Matrix Multiplication in Deep Learning 1. Matrix multiplication2. Derivation of the gradients2.1. Dimensions of the gradients2.2. The chain rule2.3. Derivation of the gradient ∂ L ∂ A \frac{ {\partial L} }{ {\partial \boldsymbol {\bo…

Spring Boot 框架简介

✨ Spring Boot 框架简介 1️⃣ &#x1f680; 快速构建 Spring Boot 能够快速构建可直接运行的、企业级 Spring 应用。 2️⃣ ⚙️ “约定优于配置” 该框架采用"约定优于配置"理念&#xff0c;默认集成 Spring 平台与主流第三方库&#xff0c;开发者仅需简单配置…

【Robocorp实战指南】Python驱动的开源RPA框架

目录 前言技术背景与价值当前技术痛点解决方案概述目标读者说明 一、技术原理剖析核心概念图解核心作用讲解关键技术模块说明技术选型对比 二、实战演示环境配置要求核心代码实现案例1&#xff1a;网页数据抓取案例2&#xff1a;Excel报表生成 运行结果验证 三、性能对比测试方…

如何使用 Spring Boot 实现分页和排序:配置与实践指南

在现代 Web 应用开发中&#xff0c;分页和排序是处理大量数据时提升用户体验和系统性能的关键功能。Spring Boot 结合 Spring Data JPA 提供了简单而强大的工具&#xff0c;用于实现数据的分页查询和动态排序&#xff0c;广泛应用于 RESTful API、后台管理系统等场景。2025 年&…

使用 LLM助手进行 Python 数据可视化

在数据科学中&#xff0c;数据可视化是一项至关重要的任务&#xff0c;旨在揭示数据背后的模式和洞察&#xff0c;并向观众传达这些信息。然而&#xff0c;在编程语言&#xff08;如 Python&#xff09;中创建有洞察力的图表有时可能会耗时且复杂。本文介绍了一种借助 AI 助手&…