Log4j2configuration – 找不到log4j2configuration文件

最近我决定学习如何使用log4j2logging器。 我下载了需要的jar文件,创build了库,xmlconfiguration文件并试图使用它。 不幸的是我在控制台(Eclipse)中得到这个声明:

ERROR StatusLogger No log4j2 configuration file found. Using default configuration: logging only errors to the console. 

这是我的testing类代码:

 package log4j.test; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; public class Log4jTest { static final Logger logger = LogManager.getLogger(Logger.class.getName()); public static void main(String[] args) { logger.trace("trace"); logger.debug("debug"); logger.info("info"); logger.warn("warn"); logger.error("error"); logger.fatal("fatal"); } } 

和我的XMLconfiguration文件:

 <?xml version="1.0" encoding="UTF-8"?> <Configuration package="log4j.test" status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Logger name="log4j.test.Log4jTest" level="trace"> <AppenderRef ref="Console"/> </Logger> <Root level="trace"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration> 

我也试图用xml没有<Logger>标签,和包规范和在各种文件夹/包目录,但它没有帮助。 现在我的log4j2.xml文件直接位于eclipse中的项目文件夹中。

这是一个简单的eclipse java项目没有maven等? 在这种情况下,您需要将log4j2.xml文件放在src文件夹下,以便能够在类path中find它。 如果你使用maven把它放在src/main/resources或者src/test/resources

您需要select以下解决scheme之一:

  1. 将log4j2.xml文件放在项目的资源目录中,这样log4j将在类path下find文件。
  2. 使用系统属性-Dlog4j.configurationFile = file:/path/to/file/log4j2.xml

遵循文档 – Apache Log4j2 Configuratoin和Apache Log4j2 Maven使用yamlconfigurationlog4j2。 根据文档,需要以下maven依赖项:

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

 <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-yaml</artifactId> <version>2.8.6</version> </dependency> 

只是添加这些没有selectconfiguration,并总是给错误。 通过添加-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE来debuggingconfiguration的方式有助于查看日志。 后来不得不使用Maven下载源代码,debugging帮助理解了log4j2的依赖类。 它们列在org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory

 com.fasterxml.jackson.databind.ObjectMapper com.fasterxml.jackson.databind.JsonNode com.fasterxml.jackson.core.JsonParser com.fasterxml.jackson.dataformat.yaml.YAMLFactory 

jackson-dataformat-yaml添加依赖映射将不会有前两个类。 因此,添加jackson-databind依赖性来获得yamlconfiguration的工作:

 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.6</version> </dependency> 

您可以通过引用来自MVN Repository的log4j-api版本项目的Test Dependencies部分来添加版本。 例如,对于2.8.1版本的log4j-api,请参阅此链接并findjackson-databind版本。

而且,您可以使用下面的Java代码来检查类path中是否有类:

 System.out.println(ClassLoader.getSystemResource("log4j2.yml")); //Check if file is available in CP ClassLoader cl = Thread.currentThread().getContextClassLoader(); //Code as in log4j2 API. Version: 2.8.1 String [] classes = {"com.fasterxml.jackson.databind.ObjectMapper", "com.fasterxml.jackson.databind.JsonNode", "com.fasterxml.jackson.core.JsonParser", "com.fasterxml.jackson.dataformat.yaml.YAMLFactory"}; for(String className : classes) { cl.loadClass(className); } 

在强制刷新IDE之前,Eclipse将永远不会看到文件。 它的一个特点! 所以你可以把文件放到项目中,Eclipse会完全忽略它,并抛出这些错误。 在Eclipse项目视图中点击刷新,然后工作。

在我的情况下,我不得不把它放在我的项目的bin文件夹,即使我的类path设置为src文件夹。 我不知道为什么,但值得一试。

除了Tomasz W写的东西,通过启动你的应用程序,你可以使用设置:

 -Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE 

获得大部分configuration问题。

有关详细信息,请参阅Log4j2 FAQ: 如何debugging我的configuration?