Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

java

log4j

log4j2

$ java -Dlog4j.configuration=file:///path/to/your/log4j2.xml -jar /path/to/your/jar_file.jar 

Written to the console, you get

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

But, it also looks like the configuration file has been found and was not parsable:

    log4j:WARN Continuable parsing error 2 and column 31     log4j:WARN Document root element "Configuration", must match DOCTYPE root "null".     log4j:WARN Continuable parsing error 2 and column 31     log4j:WARN Document is invalid: no grammar found.     log4j:ERROR DOM element is - not a <log4j:configuration> element.     log4j:WARN No appenders could be found for logger (kafka.utils.VerifiableProperties).     log4j:WARN Please initialize the log4j system properly.     log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info. 
like image 823
Jeff Maass Avatar asked Feb 17 '15 22:02

Jeff Maass


People also ask

How do I resolve error Statuslogger no log4j2 configuration file found?

Well, a solution is simplexml version="1.0" encoding="UTF-8"?> Try running your program again and you shouldn't see this issue anymore. Hope this helps.

Where is log4j configuration file?

The file is named log4j. properties and is located in the $DGRAPH_HOME/dgraph-hdfs-agent/lib directory. The file defines the ROLLINGFILE appenders for the root logger and also sets the log level for the file.

What is log4j2 configuration file?

Configuration of Log4j 2 can be accomplished in 1 of 4 ways: Through a configuration file written in XML, JSON, YAML, or properties format. Programmatically, by creating a ConfigurationFactory and Configuration implementation.

Where do I put my log4j2 XML file?

We should put log4j2. xml anywhere in the application's classpath. Log4j will scan all classpath locations to find out this file and then load it. We can find this file mostly placed in the 'src/main/resources' folder.


2 Answers

Problem 1

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

Solution 1

To work with version 2 of log4j aka "log4j2"

-Dlog4j.configuration= 

should read

-Dlog4j.configurationFile= 
  • 1.2 manual: http://logging.apache.org/log4j/1.2/manual.html
  • 2.x manual: http://logging.apache.org/log4j/2.x/manual/configuration.html

Problem 2

log4j:WARN .... 

Solution 2

In your project, uninclude the log4j-1.2 jar and instead, include the log4j-1.2-api-2.1.jar. I wasn't sure how exactly to exclude the log4j 1.2. I knew that what dependency of my project was requiring it. So, with some reading, I excluded a bunch of stuff.

<dependency>     <groupId>org.apache.kafka</groupId>     <artifactId>kafka_2.10</artifactId>     <version>0.8.2.0</version>     <exclusions>         <exclusion>             <groupId>org.apache.logging.log4j</groupId>             <artifactId>log4j-core</artifactId>                         </exclusion>         <exclusion>             <groupId>org.apache.log4j</groupId>             <artifactId>log4j-core</artifactId>         </exclusion>         <exclusion>             <groupId>log4j</groupId>             <artifactId>log4j</artifactId>         </exclusion>               </exclusions> </dependency> 

I am not sure which of the exclusions did the trick. Separately, I included a dependency to the 1.2 api which bridges to 2.x.

<!--     http://logging.apache.org/log4j/2.0/manual/migration.html     http://logging.apache.org/log4j/2.0/maven-artifacts.html     Log4j 1.x API Bridge     If existing components use Log4j 1.x and you want to have this logging     routed to Log4j 2, then remove any log4j 1.x dependencies and add the     following. --> <dependency>     <groupId>org.apache.logging.log4j</groupId>     <artifactId>log4j-1.2-api</artifactId>     <version>2.2</version> </dependency> 

Now, the 1.2 logs which were only going to the console actually flow to our 2.x appenders.

like image 182
Jeff Maass Avatar answered Sep 29 '22 18:09

Jeff Maass


If you don't have the fortune of the log4j-1.2.jar on your classpath as Renko points out in his comment, you will only see the message no log4j2 configuration file found.

This is a problem if there is an error in your configuration file, as you will not be told where the problem lies upon start-up.

For instance if you have a log4j2.yaml file which log4j2 fails to process, because for example, you have not configured a YAML parser for your project, or your config is simply incorrect. You will encounter the no log4j2 configuration file found message, with no further information. This is the case even if you have a valid log4j2.xml file, as log4j2 will only attempt to process the first configuration file it finds.

I've found the best way to debug the problem is to explicitly state the configuration file you wish to use as per the command line argument mentioned above.

-Dlog4j.configurationFile= 

Hopefully this will help you pinpoint if the issue is actually caused by your classloader not finding the log4j2 configuration file or something else in your configuration.

Update

You can also use the below property to change the default level of the status logger to get further information:

-Dorg.apache.logging.log4j.simplelog.StatusLogger.level=<level> 
like image 42
Conor Svensson Avatar answered Sep 29 '22 17:09

Conor Svensson