1. 什么是log4j

log4j是一个流行的Java日志框架,是由 Apache 的一个开源项目。它允许开发人员通过将日志语句插入应用程序代码中来记录应用程序运行时的事件。它能够控制通过哪些目标输出的消息以及每个目标的格式。

log4j主要是由 Logger,Appender,Layout 组成,
Logger,日志记录器,控制日志的输出级别以及是否输出日志。
Appender,控制日志被写入的位置,例如控制台、文件等。
Layout,用于定义日志输出的格式。

2. log4j的日志级别

Log4j有六个日志级别,分别是:TRACEDEBUGINFOWARNERRORFATAL
日志优先级为:TRACE<DEBUG<INFO<WARN<ERROR<FATAL

3. 日志层级

这里的日志层级和logback一样,根都是root,如果创建com.example.test, 根就是root,然后是com,再是example,最后就是test。这里的日志级别如果没有指定,也会继承父类。
在这里插入图片描述

4. log4j使用实例

4.1 添加log4j依赖

        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>

4.2 添加配置文件

在src/main/resources目录下,创建log4j.properties文件,编写下面代码。

log4j.rootLogger=DEBUG, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

4.3 编写代码


import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

public class Log4jTest {
    private static final Logger logger = Logger.getLogger(Log4jTest.class);

    public void test() {
        logger.trace("===TRACE===");
        logger.debug("===DEBUG===");
        logger.info("===INFO===");
        logger.warn("===WARN===");
        logger.error("===ERROR===");
        logger.fatal("===FATAL===");
    }
}

4.4 测试代码


@SpringBootTest
class Log4jApplicationTests {

    @Resource
    private Log4jTest log4jTest;
    @Test
    void test() {
        log4jTest.test();
    }

}

4.5 运行结果

在这里插入图片描述

5. 配置文件

5.1 Logger 日志记录器

一般会设置根路径的日志级别使用 rootLogger 设置。也可以指定需要的包或者类设置一个 Logger。
使用示例:

# 定义根logger级别
log4j.rootLogger=DEBUG, stdout
# 定义指定路径logger级别
log4j.logger.com.example.log4j.test.Log4jTest=INFO, CONSOLE

5.2 Appender 附加器

appender用来控制日志信息输出的位置,部分可选项如下表格。

选项作用
ConsoleAppender将日志信息输出到控制台上
FileAppender将日志信息输出到文件中
RollingFileAppender基于文件大小或日期滚动生成新的日志文件,并将日志输出到这些文件中。
SocketAppender将日志信息输出到远程服务器的Socket端口
DBAppender将日志信息写入数据库中

使用示例:

# 定义名为CONSOLE的appender(输出到控制台)
log4j.appender.console=org.apache.log4j.ConsoleAppender

# 定义名为file的appender(输出到文件中)
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=E:/workspace/logfile.txt
log4j.appender.file.encoding=UTF-8

# 定义名为rollingfile的appender(滚动的输出到文件中)
log4j.appender.rollingfile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingfile.File=E:/workspace/logrollingfile.txt
log4j.appender.rollingfile.encoding=UTF-8
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10

5.3 Layout 日志格式化器

用于控制输出日志的格式,和logback的pattern类似。

选项作用
SimpleLayout简单布局,输出包括级别和消息。
PatternLayout模式布局,允许你定义自己的输出格式,通过使用占位符指定输出内容的相对位置。
HTMLLayoutHTML布局,以HTML格式输出日志消息。
XMLLayoutXML布局,以XML格式输出日志消息。
TTCCLayout时间、线程、类别和内容布局,输出包括时间戳、线程名、日志器名称和消息。
EnhancedPatternLayout增强模式布局,与PatternLayout类似,但支持更多的占位符。

使用示例:

# 自定义输出格式
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss.SSS} - %m%n

# HTML布局
log4j.appender.file.layout=org.apache.log4j.HTMLLayout

# 简单布局
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

一些自定义输出格式

样式作用
%m输出代码中指定的日志信息
%p输出优先级,及 DEBUG、INFO 等
%n换行符
%r输出自应用启动到输出该 log 信息耗费的毫秒数
%c输出打印语句所属的类的全名
%t输出产生该日志的线程全名
%d输出服务器当前时间,默认格式为 ISO8601,也可以在后面指定格式。如:%d{yyyy年MM月dd日 HH:mm:ss}
%l输出日志时间发生的位置,包括类名、发生的线程,以及在代码中的行数,如:Test.main(Test.java:10)
%F输出日志消息产生时所在的文件名称
%L输出代码中的行号

6. 整体演示

6.1 配置文件

# 定义根logger级别
log4j.rootLogger=DEBUG, stdout
# 定义指定路径logger级别
log4j.logger.com.example.log4j.test.Log4jTest=INFO, console , file, rollingfile, stdout
# 设置不向上级传递
log4j.additivity.com.example.log4j.test.Log4jTest=false 

# 定义名为CONSOLE的appender(输出到控制台)
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss.SSS} - %m%n

# 定义名为file的appender(输出到文件中)
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=E:/workspace/logfile.html
log4j.appender.file.encoding=UTF-8
log4j.appender.file.layout=org.apache.log4j.HTMLLayout


# 定义名为rollingfile的appender(滚动的输出到文件中)
log4j.appender.rollingfile=org.apache.log4j.RollingFileAppender
log4j.appender.rollingfile.File=E:/workspace/logrollingfile.html
log4j.appender.rollingfile.encoding=UTF-8
log4j.appender.rollingfile.MaxFileSize=10MB
log4j.appender.rollingfile.MaxBackupIndex=10
log4j.appender.rollingfile.layout=org.apache.log4j.HTMLLayout

# 定义名为stdout的appender(输出到控制台)
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout

6.2 运行结果

带有时间的就是自定义的输出格式,另一种就是简单布局的格式。

在这里插入图片描述

这是生成的两个日志文件

在这里插入图片描述

这是文件中的内容
在这里插入图片描述

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐