无法加载 log4j.properties 文件

问题描述 投票:0回答:1

我正在尝试加载 Log4j 记录器的特定设置。代码适用于 1.2.17 版本。现在版本 2.21.1 不会加载文件,而是加载“默认”设置。

我正在使用 JavaSE-17 (jdk-17.0.1)

我在 1.2.17 中有这段代码来加载属性文件:

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator
....
String fileRoute = "D:/code/price-3/src/main/webapp/WEB-INF/config/log4j.properties";
PropertyConfigurator.configure(propPath);

Logger logger = Logger.getLogger(MyClass.class);

但是2.21.1版本没有“PropertyConfigurator”。

我尝试了这些选项(单独),但没有成功:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configurator;

String fileRoute = "D:/code/price-3/src/main/webapp/WEB-INF/config/log4j.properties";

//Test 1
Configurator.initialize(null, fileRoute);

//Test 2
LoggerContext context = (LoggerContext) LogManager.getContext(false);
context.setConfigLocation(URI.create("file:" + fileRoute));

//Test 3
LoggerContext context = (LoggerContext) LogManager.getContext(false);
File f = new File(fileRoute);
context.setConfigLocation(f.toURI());

//test logger
Logger logger = LogManager.getLogger(MyClass.class);

if (logger.isTraceEnabled())
    System.out.println("Trace level");

if (logger.isDebugEnabled())
    System.out.println("Debug level");

if (logger.isInfoEnabled())
    System.out.println("Info level");

if (logger.isWarnEnabled())
    System.out.println("Warn level");

if (logger.isErrorEnabled())
    System.out.println("Error level");

if (logger.isFatalEnabled())
    System.out.println("Fatal level");

logger.trace("Log write");
logger.debug("Log write");
logger.info("Log write");
logger.warn("Log write");
logger.error("Log write");
logger.fatal("Log write");

System.out.println("Name: " + logger.getName());
System.out.println("Level: " + logger.getLevel());
System.out.println("Class: " + logger.getClass());

执行后我在控制台中得到了这个:

Error level
Fatal level
10:09:55.113 [main] ERROR tu.MyClass- Log write
10:09:55.118 [main] FATAL tu.MyClass- Log write
Name: tu.MyClass
Level: ERROR
Class: class org.apache.logging.log4j.core.Logger

控制台日志输出是“默认设置”。

这是 log4j.properties 文件:

log4j.rootLogger=ALL, A0

#appender
log4j.appender.A0=org.apache.log4j.RollingFileAppender
log4j.appender.A0.append=true

#log
log4j.appender.A0.MaxFileSize=5MB
log4j.appender.A0.MaxBackupIndex=5

#log path and name
log4j.appender.A0.File=logs/price.log

#type and pattern
log4j.appender.A0.layout=org.apache.log4j.PatternLayout
log4j.appender.A0.Append=true
log4j.appender.A0.encoding=UTF-8
log4j.appender.A0.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

如何加载它以及如何检查它是否已成功加载?

java logging log4j
1个回答
0
投票

主要版本的更新允许进行重大更改。对于 Log4j,配置格式和默认配置文件名在 1.x 和 2.x 之间发生了变化。

使用 这个答案

log4j.properties
转换为
log4j2.xml

  • 从 Log4j 站点下载二进制发行版并将其解压缩为

    bin
    ,

  • 运行:

    java -cp "bin/*" org.apache.log4j.config.Log4j1ConfigurationConverter \
      --in log4j.properties \
      --out log4j2.xml \
      --verbose
    

我同意G00se的评论:不要使用编程配置。

标准位置是:

备注: 转换器会将您的

%-5p
图案替换为
%-5v1Level
。虽然后一种模式可确保与 Log4j 1.x 自定义级别 100% 兼容(参见 LOG4J2-3419),但它需要
log4j-1.2-api
工件。您可能应该将其改回
%-5p

© www.soinside.com 2019 - 2024. All rights reserved.