首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Log4j2配置-未找到log4j2配置文件

Log4j2配置-未找到log4j2配置文件
EN

Stack Overflow用户
提问于 2014-08-25 21:33:37
回答 6查看 179.2K关注 0票数 96

最近,我决定学习如何使用log4j2记录器。我下载了所需的jar文件,创建了库,xml配置文件,并尝试使用它。不幸的是,我在控制台(Eclipse)中得到了以下语句:

代码语言:javascript
复制
ERROR StatusLogger No log4j2 configuration file found. Using default configuration:       logging only errors to the console.

这是我的测试类代码:

代码语言:javascript
复制
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");
    }
}

和我的xml配置文件:

代码语言:javascript
复制
<?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>

我还尝试了不带<Logger>标记的xml和包规范,以及各种文件夹/包目录中的包,但没有帮助。现在,我的log4j2.xml文件直接位于eclipse的项目文件夹中。

EN

回答 6

Stack Overflow用户

发布于 2014-08-25 21:51:13

这是一个没有maven的简单的eclipse java项目吗?在这种情况下,您需要将log4j2.xml文件放在src文件夹下,以便能够在类路径中找到它。如果使用maven,请将其放在src/main/resourcessrc/test/resources

票数 145
EN

Stack Overflow用户

发布于 2017-04-07 00:08:04

在使用yaml配置log4j2时遵循了文档- Apache Log4j2 ConfiguratoinApache Log4j2 Maven。根据文档,以下maven依赖项是必需的:

代码语言:javascript
复制
  <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>

代码语言:javascript
复制
<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-yaml</artifactId>
    <version>2.8.6</version>
</dependency>

只是添加这些并不会选择配置,而且总是会出现错误。通过添加-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACEdebugging configuration方式有助于查看日志。后来不得不使用Maven下载源代码,调试有助于理解log4j2的依赖类。它们在org.apache.logging.log4j.core.config.yaml.YamlConfigurationFactory中列出

代码语言:javascript
复制
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依赖项以使yaml配置正常工作:

代码语言:javascript
复制
<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.8.6</version>
</dependency>

您可以通过参考MVN Repositorylog4j-api版本项的Test Dependencies部分来添加版本。例如,对于2.8.1版本的log4j-api,请参考此link并找到jackson-databind版本。

此外,您可以使用以下Java代码来检查类路径中是否存在这些类:

代码语言:javascript
复制
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);
 }
票数 18
EN

Stack Overflow用户

发布于 2016-02-24 03:02:56

在强制刷新IDE之前,Eclipse永远看不到文件。这是一个特性!因此,您可以将该文件放在整个项目中,Eclipse将完全忽略它并抛出这些错误。在Eclipse项目视图中点击刷新,然后它就可以工作了。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25487116

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档