行业资讯 2025年08月6日
0 收藏 0 点赞 655 浏览 3977 个字
摘要 :

文章目录 1.Log4j2依赖项 1.1 Maven 1.2 Gradle 2.默认的日志行为 3.配置log4j2.properties以进行控制台日志记录 4.配置log4j2.properties以进行滚动日志文件记录 5.……




  • 1.Log4j2依赖项
    • 1.1 Maven
    • 1.2 Gradle
  • 2.默认的日志行为
  • 3.配置log4j2.properties以进行控制台日志记录
  • 4.配置log4j2.properties以进行滚动日志文件记录
  • 5.在类路径中扫描log4j2.properties文件
  • 6.Demo

学习如何配置log4j2.properties文件,以便将日志语句输出到控制台、滚动文件等,并学习如何配置log4j2的附加器、级别和模式。

1.Log4j2依赖项

请注意,使用带有SLF4J的Log4j2是推荐的方法。

1.1 Maven

要包含Log4j2,请包括最新版本的log4j-core和log4j-api依赖项。

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

1.2 Gradle

dependencies {
    implementation \'org.apache.logging.log4j:log4j-api:2.19.0\'
    implementation \'org.apache.logging.log4j:log4j-core:2.19.0\'
}

2.默认的日志行为

默认行为会在以下情况下启动:

  • 没有在启动参数中指定log4j.configurationFile属性,或者此属性未指向有效的配置文件。
  • 类路径中没有有效的log4j2-test.[xml|properties|yaml|json]文件。
  • 类路径中没有log4j2.[xml|properties|yaml|json]文件。

默认情况下,Log4j2将使用ConsoleAppender将日志消息写入控制台。

此外,根记录器默认定义为ERROR级别。这意味着只有ERROR日志语句才会显示,而INFO,DEBUG,TRACE级别的日志消息将不可见。

3.配置log4j2.properties以进行控制台日志记录

我们可以使用以下log4j2.properties文件将日志输出到控制台。请注意,如果没有找到配置文件,将使用DefaultConfiguration,这也将记录到控制台。

log4j2.properties:

# 设置日志4j初始化失败时是否进行调试或跟踪
status = warn
# 配置名称
name = ConsoleLogConfigDemo
# 控制台 appender 配置
appender.console.type = Console
appender.console.name = consoleLogger
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# Root logger level
rootLogger.level = debug
# 根记录器引用控制台appender
rootLogger.appenderRef.stdout.ref = consoleLogger

4.配置log4j2.properties以进行滚动日志文件记录

我们可以使用以下log4j2.properties文件将日志输出到基于时间和大小滚动文件。

log4j2.propertiesstatus = warn
name= RollingFileLogConfigDemo
# Log 日志文件存放位置
property.basePath = c:/temp/logs
# RollingFileAppender 名称、模式、路径和滚动策略
appender.rolling.type = RollingFile
appender.rolling.name = fileLogger
appender.rolling.fileName= ${basePath}/app.log
appender.rolling.filePattern= ${basePath}/app_%d{yyyyMMdd}.log.gz
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = %d{yyyy-MM-dd HH:mm:ss.SSS} %level [%t] [%l] - %msg%n
appender.rolling.policies.type = Policies
# RollingFileAppender 轮转策略
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 10MB
appender.rolling.policies.time.type = TimeBasedTriggeringPolicy
appender.rolling.policies.time.interval = 1
appender.rolling.policies.time.modulate = true
appender.rolling.strategy.type = DefaultRolloverStrategy
appender.rolling.strategy.delete.type = Delete
appender.rolling.strategy.delete.basePath = ${basePath}
appender.rolling.strategy.delete.maxDepth = 10
appender.rolling.strategy.delete.ifLastModified.type = IfLastModified
# 删除所有超过 30 天的文件
appender.rolling.strategy.delete.ifLastModified.age = 30d
# 配置root logger
rootLogger.level = debug
rootLogger.appenderRef.rolling.ref = fileLogger

5.在类路径中扫描log4j2.properties文件

我们应该将log4j2.properties放在应用程序类路径的任何位置。 Log4j2将扫描所有类路径位置以查找此文件并加载它。

我们将文件放在resources资源文件夹中。如何配置log4j2.properties文件

如果我们使用外部的log4j2配置文件,则可以使用应用程序启动参数或系统属性log4j2.configurationFile指定配置文件的路径。请注意,此属性值不仅限于本地文件系统上的位置,还可能包含URL。

-Dlog4j2.configurationFile=file:/home/lokesh/log4j2.properties

常见的方法是在junit测试类中注解@BeforeAll方法中设置log4j2.configurationFile属性。这将允许在测试期间使用任意命名的文件。

6.Demo

让我们编写一个Java类和一些日志语句来验证日志是否出现在控制台和日志文件中。

要记录这些语句,我们通过使用SLF4J LoggerFactory类及其getLogger()方法获取Logger实例。然后,我们使用Logger的各种方法来记录日志记录,例如info()、error()和debug()。

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Main {
  public static void main(final String[] args)
  {
      Logger logger = LoggerFactory.getLogger(Main.class);
      logger.debug(\"Debug Message Logged !!!\");
      logger.info(\"Info Message Logged !!!\");
      logger.error(\"Error Message Logged !!!\", new NullPointerException(\"NullError\"));
  }
}

现在,运行上述程序时,我们将在控制台上获取以下日志语句。

2021-12-14 14:26:32.737 DEBUG [main] [com.howtodoinjava.demo.slf4j.Main.main (Main.java:10)] - Debug Message Logged !!!
2021-12-14 14:26:32.739 INFO [main] [com.howtodoinjava.demo.slf4j.Main.main (Main.java:11)] - Info Message Logged !!!
2021-12-14 14:26:32.739 ERROR [main] [com.howtodoinjava.demo.slf4j.Main.main (Main.java:12)] - Error Message Logged !!!
java.lang.NullPointerException: NullError
    at com.howtodoinjava.demo.slf4j.Main.main (Main.java:12) [classes/:?]

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9554.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号