自学内容网 自学内容网

Java配置log4j日志打印

1. 引入依赖

<dependencies>
    <!-- Log4j 2依赖 -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>1.2.14</version> <!-- 可以根据需要修改版本 -->
    </dependency>
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>1.2.14</version> <!-- 可以根据需要修改版本 -->
    </dependency>
</dependencies>

2. 配置文件

Log4j 需要一个配置文件来定义日志输出的方式、级别和格式。你可以创建一个名为 log4j2.xmllog4j2.propertieslog4j2.json 的配置文件。

log4j2.properties

log4j.rootLogger=INFO,file,console

log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file.File=logs/pro_alllog.log
log4j.appender.file.Threshold=INFO
#log4j.appender.file.MaxFileSize=2048KB
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=<%p><%d{yyyy-MM-dd HH:mm:ss.SSSS}>[%X{loggerId}]<%F><%M><%L><%t>%m%n
log4j.appender.file.encoding=GBK

这个配置文件是 Log4j 1.x 的配置文件(log2没有properties格式的配置文件),下面是对每个配置项的详细解释:

  1. log4j.rootLogger=INFO,file,console
    log4j.rootLogger:定义了根日志记录器的日志级别和附加器(Appender)。
    INFO:设置日志的最低级别为 INFO。这意味着只有 INFO、WARN、ERROR 和 FATAL 级别的日志会被记录,低于 INFO 级别的日志(如 DEBUG 和 TRACE)将被忽略。
    file 和 console:表示日志将被发送到两个目标(Appender):文件和控制台。
  2. log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.file:定义了一个日志附加器(Appender),此处使用的是 DailyRollingFileAppender,意味着日志将被写入文件,并且每天会生成一个新的日志文件。
    org.apache.log4j.DailyRollingFileAppender:是 Log4j 提供的一个内置类,它会根据日期进行日志文件的滚动(例如每天创建一个新的日志文件)。
  3. log4j.appender.file.File=logs/pro_alllog.log
    log4j.appender.file.File:指定日志文件的路径和文件名。在这里,日志将被写入到 logs/pro_alllog.log 文件中。
  4. log4j.appender.file.Threshold=INFO
    log4j.appender.file.Threshold:指定该附加器的日志记录级别。INFO 表示只有 INFO 及其以上级别的日志(如 WARN、ERROR、FATAL)才会写入到日志文件中,低于 INFO 级别的日志(如 DEBUG 和 TRACE)将不会被记录到文件中。
  5. log4j.appender.file.MaxFileSize=2048KB
    MaxFileSize 设定了单个日志文件的最大大小,当文件大小超过此阈值时,会创建一个新的日志文件。
    如果启用,2048KB 表示每个日志文件的最大大小为 2MB。
  6. log4j.appender.file.layout=org.apache.log4j.PatternLayout
    log4j.appender.file.layout:指定日志格式的布局方式。在这里使用了 PatternLayout,它允许你自定义日志条目的格式。
    PatternLayout 是一种非常灵活的日志格式布局方式,允许使用格式化模式定义日志的输出格式。
  7. log4j.appender.file.layout.ConversionPattern=<%p><%d{yyyy-MM-dd HH:mm:ss.SSSS}>[%X{loggerId}]<%F><%M><%L><%t>%m%n
    log4j.appender.file.layout.ConversionPattern:定义了日志消息的格式。
    • %p:日志级别(如 INFO、ERROR)。
    • %d{yyyy-MM-dd HH:mm:ss.SSSS}:日志的时间戳,格式为 yyyy-MM-dd HH:mm:ss.SSSS,即年-月-日 小时:分钟:秒.毫秒。
    • [%X{loggerId}]:日志上下文信息中名为 loggerId 的值(如果有设置 MDC(Mapped Diagnostic Context)中的 loggerId)。
    • %F:输出日志所在的源代码文件名。
    • %M:输出日志所在的函数名。
    • %L:输出日志所在的行号。
    • %t:输出日志产生的线程的名称。
    • %m:输出日志的消息内容。
    • %n:换行符。
      这个模式定义了每条日志记录的格式,使得日志具有非常详细的上下文信息,帮助开发人员定位问题。
  8. log4j.appender.file.encoding=GBK
    log4j.appender.file.encoding:指定日志文件的字符编码。在这里,日志文件使用 GBK 编码格式,这对中文日志尤其重要,因为它能确保日志文件正确地显示中文字符。
    总结:
    这个配置文件定义了 Log4j 的日志输出设置:

3. 在代码中使用 Log4j

在 Java 代码中,你可以使用 Log4j 记录日志。首先,导入 Log4j 的 API 类,然后创建 Logger 对象。

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

public class MyApplication {
    // 创建 Logger 对象
    private static final Logger logger = LogManager.getLogger(MyApplication.class);

    public static void main(String[] args) {
        // 记录不同级别的日志
        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 warn message.");
        logger.error("This is an error message.");
        logger.fatal("This is a fatal message.");
    }
}

4. Log 2版本配置文件

  • 类路径(Classpath):Log4j 2.x 会默认在类路径(例如项目的 resources 目录)中查找配置文件,特别是 log4j2.xml。
  • 如果配置文件不在类路径中,Log4j2 可能不会按预期工作。
  • 典型的文件路径:src/main/resources/log4j2.xml 或者 src/main/resources/log4j2.yml,视项目的构建方式和结构而定。

xml版本

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
    <Appenders>
        <!-- 文件输出配置,类似于 DailyRollingFileAppender -->
        <RollingFile name="FileAppender" fileName="logs/pro_alllog.log" filePattern="logs/$${date:yyyy-MM-dd}/pro_alllog-%d{yyyy-MM-dd}.log">
            <PatternLayout pattern="<%p><%d{yyyy-MM-dd HH:mm:ss.SSSS}>[%X{loggerId}]<%F><%M><%L><%t>%m%n"/>
            <Policies>
                <!-- 滚动策略,可以基于时间滚动 -->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
            <Encoding>GBK</Encoding>
        </RollingFile>

        <!-- 控制台输出配置 -->
        <Console name="ConsoleAppender">
            <PatternLayout pattern="<%p><%d{yyyy-MM-dd HH:mm:ss.SSSS}>[%X{loggerId}]<%F><%M><%L><%t>%m%n"/>
        </Console>
    </Appenders>

    <Loggers>
        <!-- 根日志记录器,日志级别设置为INFO,添加文件和控制台输出 -->
        <Root level="info">
            <AppenderRef ref="FileAppender"/>
            <AppenderRef ref="ConsoleAppender"/>
        </Root>
    </Loggers>
</Configuration>

yaml版本

Configuration:
  status: WARN
  Appenders:
    RollingFile:
      name: FileAppender
      fileName: logs/pro_alllog.log
      filePattern: logs/$${date:yyyy-MM-dd}/pro_alllog-%d{yyyy-MM-dd}.log
      PatternLayout:
        pattern: "<%p><%d{yyyy-MM-dd HH:mm:ss.SSSS}>[%X{loggerId}]<%F><%M><%L><%t>%m%n"
      Policies:
        - TimeBasedTriggeringPolicy:
            interval: 1
            modulate: true
      Encoding: GBK

    Console:
      name: ConsoleAppender
      PatternLayout:
        pattern: "<%p><%d{yyyy-MM-dd HH:mm:ss.SSSS}>[%X{loggerId}]<%F><%M><%L><%t>%m%n"

  Loggers:
    Root:
      level: info
      AppenderRef:
        - ref: FileAppender
        - ref: ConsoleAppender

原文地址:https://blog.csdn.net/m0_53951384/article/details/145142393

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!