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 依赖:
8.idea创建maven项目(使用Log4j日志记录框架+Log4j 介绍)_第1张图片

    
    <dependencies>
        
        <dependency>
            <groupId>org.apache.logging.log4jgroupId>
            <artifactId>log4j-apiartifactId>
            <version>2.20.0version>
        dependency>
        <dependency>
            <groupId>org.apache.logging.log4jgroupId>
            <artifactId>log4j-coreartifactId>
            <version>2.20.0version>
        dependency>
    dependencies>

3. 创建 Log4j 配置文件

src/main/resources 目录下创建 log4j2.xml 文件,配置 Log4j 的日志输出格式和级别:
8.idea创建maven项目(使用Log4j日志记录框架+Log4j 介绍)_第2张图片



<Configuration status="WARN">
    

    <Appenders>
        

        
        <Console name="Console" target="SYSTEM_OUT">
            

            
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            
        Console>

        
        <File name="File" fileName="logs/app.log">
            

            
            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
            
        File>
    Appenders>

    <Loggers>
        

        
        <Root level="info">
            

            
            <AppenderRef ref="Console"/>
            <AppenderRef ref="File"/>
            
        Root>
    Loggers>
Configuration>

4. 编写示例代码

src/main/java 目录下创建一个 Java 类,使用 Log4j 记录日志:
8.idea创建maven项目(使用Log4j日志记录框架+Log4j 介绍)_第3张图片

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级别的日志

8.idea创建maven项目(使用Log4j日志记录框架+Log4j 介绍)_第4张图片
8.idea创建maven项目(使用Log4j日志记录框架+Log4j 介绍)_第5张图片

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

8.idea创建maven项目(使用Log4j日志记录框架+Log4j 介绍)_第6张图片

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 或环境变量)。
  • 最小权限原则
    • 日志文件和配置文件的目录应设置适当的权限,防止未授权访问。

你可能感兴趣的:(JAVA学习笔记,intellij-idea,maven,log4j)