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.xml
、log4j2.properties
或 log4j2.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格式的配置文件),下面是对每个配置项的详细解释:
log4j.rootLogger=INFO,file,console
log4j.rootLogger
:定义了根日志记录器的日志级别和附加器(Appender)。
INFO:设置日志的最低级别为 INFO。这意味着只有 INFO、WARN、ERROR 和 FATAL 级别的日志会被记录,低于 INFO 级别的日志(如 DEBUG 和 TRACE)将被忽略。
file 和 console:表示日志将被发送到两个目标(Appender):文件和控制台。log4j.appender.file=org.apache.log4j.DailyRollingFileAppender
log4j.appender.file
:定义了一个日志附加器(Appender),此处使用的是DailyRollingFileAppender
,意味着日志将被写入文件,并且每天会生成一个新的日志文件。
org.apache.log4j.DailyRollingFileAppender
:是 Log4j 提供的一个内置类,它会根据日期进行日志文件的滚动(例如每天创建一个新的日志文件)。log4j.appender.file.File=logs/pro_alllog.log
log4j.appender.file.File
:指定日志文件的路径和文件名。在这里,日志将被写入到logs/pro_alllog.log
文件中。log4j.appender.file.Threshold=INFO
log4j.appender.file.Threshold
:指定该附加器的日志记录级别。INFO 表示只有 INFO 及其以上级别的日志(如 WARN、ERROR、FATAL)才会写入到日志文件中,低于 INFO 级别的日志(如 DEBUG 和 TRACE)将不会被记录到文件中。log4j.appender.file.MaxFileSize=2048KB
MaxFileSize
设定了单个日志文件的最大大小,当文件大小超过此阈值时,会创建一个新的日志文件。
如果启用,2048KB 表示每个日志文件的最大大小为 2MB。log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout
:指定日志格式的布局方式。在这里使用了 PatternLayout,它允许你自定义日志条目的格式。
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.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
:换行符。
这个模式定义了每条日志记录的格式,使得日志具有非常详细的上下文信息,帮助开发人员定位问题。
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)!