java - Log4J2 以编程方式读取属性文件时不记录任何内容

标签 java spring-boot log4j2 java-11

我有一个 SpringBoot (2.2.4)/Java 11 应用程序,我尝试使用外部配置文件(.properties 格式)实现 Log4J2 日志记录。
初始化记录器的代码如下:

public static void initLogger(String fileName) {
  checkLoggingPropertiesFile(fileName);

  try (FileInputStream loggingConfigurationProperties = new FileInputStream(fileName)) {
    ConfigurationSource source = new ConfigurationSource(loggingConfigurationProperties, new File(fileName));
    Configurator.initialize(null, source);
  } catch (IOException ioe) {
    System.err.println("log4j2.properties could not be loaded! " + ioe.getCause() + "/" + ioe.getMessage());
  }

}

在控制台中,我收到以下消息:
Set log configuration file config\log4j2.properties
Set log configuration file config\log4j2.properties

配置文件存在于文件位置,其内容如下:
name = MyPropertiesConfiguration
status = warn
monitorInterval = 30

property.basePath = logs

appenders = rolling, console

appender.rolling.type = RollingFile
appender.rolling.name = fileAppender
appender.rolling.fileName = ${basePath}/MyLogFile-${date:yyyyMMdd}.log
appender.rolling.filePattern = ${basePath}/MyLogFile-${date:yyyyMMdd}-%i.log
appender.rolling.layout.type = PatternLayout
appender.rolling.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n
appender.rolling.policies.type = Policies
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 10MB

appender.console.type = Console
appender.console.name = consoleAppender
appender.console.target = SYSTEM_OUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg%n

loggers = main, springframework

logger.main.name = com.mypackage.main
logger.main.level = debug
logger.main.aditivity = false
logger.main.appenderRef.rolling.ref = fileAppender
logger.main.appenderRef.console.ref = consoleAppender

logger.springframework.name = org.springframework.boot
logger.springframework.level = error
logger.springframework.aditivity = false
logger.springframework.appenderRef.rolling.ref = fileAppender
logger.springframework.appenderRef.console.ref = consoleAppender

rootLogger.level = error
rootLogger.additivity = false
rootLogger.appenderRef.rolling.ref = fileAppender
rootLogger.appenderRef.console.ref = consoleAppender

问题是没有记录任何内容。
文件 MyLogFile-20200312.log 仍然被创建,但它是空的。
当我将此配置文件放在类路径中时,一切都按预期工作。
你能指出我做错了什么吗?

最佳答案

在进一步调查问题后,加载配置文件的解决方案似乎非常简单:

Configurator.initialize(null, fileName);

最初,我不认为它适用于与 XML 不同的文件格式。

关于java - Log4J2 以编程方式读取属性文件时不记录任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60655995/

相关文章:

java - Oracle SOA Suite 中的自定义记录器记录到错误的文件

java - 始终返回登录屏幕

java - 使用 Spring Boot 和 Spring Batch 读取 .csv 文件并将其存储在数据库中

java - Log4j2 使用spring时找不到?

java - 如何使用 Jersey Framework 为 Spring Boot 应用程序 REST 创建工作测试用例

java - 如何通过 Camel Jetty 组件使用 Spring Boot 中的 Jetty?

spring - log4j 的 spring-boot 支持版本是什么?

java - 将 java 源代码转换为字节码时的优化

java - 将数组传递给方法与将原始数据类型传递给方法不一致

java - ArrayList 随机更新