Java log4j2 使用小结-quick start

日志在我们日常开发中必不可少,在各种项目中,通过日志记录各种信息,比如典型的 web 应用,通常我们都会记录下 请求和响应,有的时候对于一些关键的处理逻辑,我们也会记录,以便在排查问题时快速定位。

今天我们就 Java 项目中常用的日志框架 log4j2 做个使用小结,其实也是个 quick start,log4j2 日志框架强大,就几篇分享肯定搞不定,后续有时间再学习下相关的内容。

闲话少说,我们直接看看在一个 maven项目管理 中,我们是怎么使用 log4j2 的吧。

1.创建 maven项目

创建 maven项目都是比较简单了,直接在 IDEA 中创建即可。

这是我的 maven项目:

2.编写依赖

接下来是编写项目依赖,因为我们用到 log4j2,对应会依赖 log4j-apilog4j-core,所以我们在pom.xml中加入下面依赖部分:

xml 复制代码
<dependencies>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>2.21.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.21.1</version>
    </dependency>
</dependencies>

以下是 pom.xml 的完整内容:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>log4j2Demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>21</maven.compiler.source>
        <maven.compiler.target>21</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.21.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.21.1</version>
        </dependency>
    </dependencies>

</project>

3.编写log4j2配置

接下来是配置 log4j2,在 resources目录 下新建 log4j2.xml,建议这样命名,下面日志配置的内容:

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
    <Appenders>
        <Console name="console" target="SYSTEM_OUT">
            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
        </Console>
        <File name="file" fileName="logs/app.log">
            <PatternLayout pattern="%d %-5p [%t] %C{2} (%F:%L) - %m%n"/>
        </File>
    </Appenders>
    <Loggers>
        <Root level="debug">
            <AppenderRef ref="console"/>
            <AppenderRef ref="file"/>
        </Root>
    </Loggers>
</Configuration>

从配置中,我们主要关注两个标签,一个是 Appenders,一个是 Loggers,在 Appenders 中,我们加入两项输出,一个是控制台,一个是文件,所以只要有日志打印,对应的输出到控制台和文件中。

这里需要注意一点: 我们在选择输出到文件时,指定了日志存储路径,实际这个 logs目录 应该在项目的根目录中先创建好,具体文件系统会自动创建。

4.项目中使用

接下来是项目中的应用:

Java 复制代码
package org.example;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

public class MyHelloWorld {
    private static Logger logger = LogManager.getLogger(MyHelloWorld.class);

    public static void main(String[] args) {
        logger.debug("这是 DEBUG 日志");
        logger.info("这是 INFO 日志");
        logger.error("这是 ERROR 日志");
        logger.fatal("这是 FATAL 日志");
    }
}

运行下 main,check下在控制台和文件汇总是否都有输出。

console

less 复制代码
2023-11-16 17:21:36,245 DEBUG [main] example.MyHelloWorld (MyHelloWorld.java:10) - 这是 DEBUG 日志
2023-11-16 17:21:36,248 INFO  [main] example.MyHelloWorld (MyHelloWorld.java:11) - 这是 INFO 日志
2023-11-16 17:21:36,249 ERROR [main] example.MyHelloWorld (MyHelloWorld.java:12) - 这是 ERROR 日志
2023-11-16 17:21:36,249 FATAL [main] example.MyHelloWorld (MyHelloWorld.java:13) - 这是 FATAL 日志

logs/app.log

通过以上的小case,我们实现了 log4j2 在项目中使用,最后总结下:

  • 1.编写 pom.xml 项目依赖
  • 2.编写 log4j2 配置 log4j2.xml
  • 3.项目中应用 log4j
相关推荐
消失的旧时光-194317 小时前
第二十一课:系统是怎么一步步拆坏的?——单体到模块化实践(完整工程版)
java·spring boot·后端·架构
wanderful_17 小时前
自定义用户体系下 Django 业务模块开发踩坑与通用解决方案(技术分享版)
后端·python·django
Coder_Boy_17 小时前
Java高级_资深_架构岗 核心面试知识点(AI整合+混合部署)
java·人工智能·spring boot·后端·面试·架构
PD我是你的真爱粉17 小时前
RabbitMQRPC与死信队列
后端·python·中间件
BingoGo17 小时前
PHP 的问题不在语言本身,而在我们怎么写它
后端·php
qq_2562470517 小时前
Copilot “Plan Mode“ + 多模型协同实战:让复杂项目开发丝滑起飞
后端
计算机学姐17 小时前
基于SpringBoot的药房管理系统【个性化推荐+数据可视化】
java·spring boot·后端·mysql·spring·信息可视化·java-ee
codeGoogle17 小时前
2026 年 IM 怎么选?聊聊 4 家主流即时通讯方案的差异
android·前端·后端
小沈同学呀17 小时前
Spring Boot实现加密字段模糊查询的最佳实践
java·spring boot·后端·encrypt
Maguyusi17 小时前
go 批量生成 c++与lua的proto文件
开发语言·后端·golang·protobuf