Log4j2 configuration - No log4j2 configuration file found

前端 未结 6 631
说谎
说谎 2020-12-07 14:19

Lately I decided to learn how to use the log4j2 logger. I downloaded required jar files, created library, xml comfiguration file and tried to use it. Unfortunately i get thi

6条回答
  •  孤街浪徒
    2020-12-07 14:55

    Was following the documentations - Apache Log4j2 Configuratoin and Apache Log4j2 Maven in configuring log4j2 with yaml. As per the documentation, the following maven dependencies are required:

      
        org.apache.logging.log4j
        log4j-api
        2.8.1
      
      
        org.apache.logging.log4j
        log4j-core
        2.8.1
      
    

    and

    
        com.fasterxml.jackson.dataformat
        jackson-dataformat-yaml
        2.8.6
    
    

    Just adding these didn't pick the configuration and always gave error. The way of debugging configuration by adding -Dorg.apache.logging.log4j.simplelog.StatusLogger.level=TRACE helped in seeing the logs. Later had to download the source using Maven and debugging helped in understanding the depended classes of log4j2. They are listed in 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
    

    Adding dependency mapping for jackson-dataformat-yaml will not have the first two classes. Hence, add the jackson-databind dependency to get yaml configuration working:

    
        com.fasterxml.jackson.core
        jackson-databind
        2.8.6
    
    

    You may add the version by referring to the Test Dependencies section of log4j-api version item from MVN Repository. E.g. for 2.8.1 version of log4j-api, refer this link and locate the jackson-databind version.

    Moreover, you can use the below Java code to check if the classes are available in the classpath:

    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);
     }
    

提交回复
热议问题