Bootstrap

Java日志Log4j与@Slf4j注解

Log4j 是一个功能强大且灵活的日志框架,广泛用于Java应用程序中。Log4j 允许开发人员在应用程序中记录各种级别的日志信息,以帮助调试、监控和分析程序的运行情况。以下是对Log4j的详细介绍及其使用方法。

Log4j 的主要概念

  1. Logger:负责记录日志的对象。可以在应用程序的任何地方创建并使用。
  2. Appender:负责将日志信息输出到指定的目标,如控制台、文件、数据库等。
  3. Layout:定义日志信息的格式,决定日志记录的输出样式。

Log4j 的依赖引入

以Maven为例,以下是引入Log4j依赖的方式:

<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

配置Log4j

Log4j 可以通过配置文件进行配置,常见的配置文件有 log4j.propertieslog4j.xml。下面分别介绍这两种配置方式。

使用 log4j.properties

创建一个名为 log4j.properties 的文件,放在资源目录中:

# 根Logger的配置
log4j.rootLogger=INFO, stdout, file

# 控制台输出配置
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# 文件输出配置
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/app.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
使用 log4j.xml

创建一个名为 log4j.xml 的文件,放在资源目录中:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration>
    <!-- 根Logger的配置 -->
    <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
        </layout>
    </appender>

    <appender name="file" class="org.apache.log4j.RollingFileAppender">
        <param name="File" value="logs/app.log"/>
        <param name="MaxFileSize" value="10MB"/>
        <param name="MaxBackupIndex" value="5"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
        </layout>
    </appender>

    <root>
        <priority value="INFO"/>
        <appender-ref ref="stdout"/>
        <appender-ref ref="file"/>
    </root>
</log4j:configuration>

使用Log4j记录日志

  1. 获取Logger实例
    在需要记录日志的类中,获取Logger实例。通常使用类的全限定名作为Logger的名称。

    import org.apache.log4j.Logger;
    
    public class MyClass {
        private static final Logger logger = Logger.getLogger(MyClass.class);
    
        public void doSomething() {
            logger.info("This is an info message");
            logger.debug("This is a debug message");
            logger.error("This is an error message");
        }
    }
    
  2. 记录不同级别的日志
    Log4j提供了多种日志级别的方法,开发人员可以根据日志的重要性选择合适的级别。

    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 warning message");
    logger.error("This is an error message");
    

Log4j的日志级别

Log4j 提供了以下日志级别,从高到低依次为:

  1. FATAL:记录非常严重的错误,导致程序中止运行。
  2. ERROR:记录错误事件,但程序可以继续运行。
  3. WARN:记录可能会出现问题的警告信息。
  4. INFO:记录一般信息,描述程序的运行状态。
  5. DEBUG:记录详细信息,用于调试。
  6. TRACE:记录更为详细的信息,通常用于跟踪程序的执行流程。

Log4j 本身并不直接支持注解方式来记录日志,但可以通过结合 Lombok 项目来实现类似的功能。Lombok 提供了一些方便的注解来自动生成代码,其中包括日志记录的注解。以下是一个使用 Lombok 提供的 @Slf4j 注解来实现 Log4j 日志记录的示例:

步骤 1:引入依赖

使用 Maven 项目,需要在 pom.xml 文件中引入 Lombok 和 Log4j 的依赖:

<dependencies>
    <!-- Lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.20</version>
        <scope>provided</scope>
    </dependency>

    <!-- Log4j -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>

    <!-- SLF4J API for Lombok logging -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.30</version>
    </dependency>

    <!-- SLF4J Log4j binding -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.30</version>
    </dependency>
</dependencies>

步骤 2:配置 Log4j

创建一个 log4j.properties 文件来配置 Log4j:

# 根Logger的配置
log4j.rootLogger=INFO, stdout, file

# 控制台输出配置
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# 文件输出配置
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=logs/app.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=5
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

步骤 3:使用 @Slf4j 注解

在你的Java类中使用 @Slf4j 注解来自动生成 Logger 实例并记录日志:

import lombok.extern.slf4j.Slf4j;

@Slf4j
public class MyClass {

    public void doSomething() {
        log.info("This is an info message");
        log.debug("This is a debug message");
        log.error("This is an error message");
    }

    public static void main(String[] args) {
        MyClass myClass = new MyClass();
        myClass.doSomething();
    }
}

说明

  • @Slf4j 注解:Lombok 提供的注解,用于自动生成名为 log 的 SLF4J Logger 实例。
  • doSomething 方法中,使用 log 实例记录不同级别的日志信息。
;