如何配置log4j2.properties文件

后端 潘老师 7个月前 (10-25) 332 ℃ (0) 扫码查看

学习如何配置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配置文件,则可以使用应用程序启动参数或系统属性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.panziye.com/back/10371.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】