【问题标题】:log4j not initialized and no appenders foundlog4j 未初始化且未找到附加程序
【发布时间】:2016-04-07 22:15:24
【问题描述】:

我正在尝试在我的 Java 应用程序(没有网络应用程序)中使用 log4j。因此,我直接在我的 /src 文件夹中添加了配置文件。

log4j.properties

log4j.rootLogger=DEBUG

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

我的主类在一个带有子命名空间的包中,我在其中尝试如下记录:

final static Logger logger = Logger.getLogger(MainClass.class);
public static void main(String[] args) {
    //BasicConfigurator.configure();
    logger.warn("some warning");
}

但我仍然收到一条错误消息,我不知道该怎么办。您会看到上面的注释行 BasicConfigurator。据我所知,应该在不调用该行的情况下读取 log4j.properties,对吧?

log4j:WARN 找不到记录器的附加程序 (在.company.project.poi.MainClass)。 log4j:WARN 请初始化 log4j 系统正常。 log4j:WARN 见 http://logging.apache.org/log4j/1.2/faq.html#noconfig 了解更多信息。

【问题讨论】:

  • 你使用什么样的构建系统?
  • 没有特定的构建系统,只是 Eclipse 中的一个简单的 java 项目。构建路径中的依赖项设置正确。如果我使用上面的那一行,那么我会在控制台上看到输出,但是不会从属性文件中读取配置。
  • 属性文件应该放在根文件夹而不是src文件夹。那可能是你的问题。您可能会对此线程感兴趣:stackoverflow.com/questions/7390521/…
  • 我假设您的文件夹 src 没有作为资源文件夹添加到您的类路径中。您是否指定了资源(参见here)?
  • 如果文件在 src 文件夹中,则在执行时将文件复制到 /bin 文件夹。如果我将文件移动到根文件夹,则不会复制它。两种方式的错误都是一样的。

标签: java logging log4j


【解决方案1】:

根据文档,文件应位于类路径中并命名为“log4j2.properties”

也可以通过设置-Dlog4j.configurationFile="<your config filepath>"直接设置配置

来源:https://logging.apache.org/log4j/2.x/manual/configuration.html

【讨论】:

  • 项目的根路径还是在 /src 文件夹中?
  • 在执行期间必须在类路径上,但是看到预期的文件名,你错过了一个字符;)
  • 好的,我的文件名错误,但错误仍然存​​在。即使没有路径参数,Log4j 也应该读取文件吗?还是我真的需要这个论点?
  • Log4j 读取文件,如果它被正确命名并且在类路径上。通常在 IDE 中,标记为资源目录的目录下的所有文件在执行期间都放在类路径中。设置属性'log4j.configurationFile'手动删除所有自动检测并放置您设置的文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-02-12
  • 2017-04-02
  • 2019-01-09
  • 1970-01-01
  • 1970-01-01
  • 2013-06-13
  • 2020-10-16
相关资源
最近更新 更多