I am trying to configure log4j 2.0 to report logs.
My config is saved as log4j2.xml and this is its content:
<?xml version="1.0" encoding="UTF-8"?>
<configuration name="PRODUCTION" status="OFF">
<appenders>
<RollingFile name="MyFileAppender"
fileName="../Logs/app.log"
filePattern="../Logs/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
<PatternLayout>
<pattern>%d %p %C{1.} [%t] %m%n</pattern>
</PatternLayout>
<Policies>
<OnStartupTriggeringPolicy />
<TimeBasedTriggeringPolicy interval="6" modulate="true"/>
<SizeBasedTriggeringPolicy size="250 MB"/>
</Policies>
</RollingFile>
</appenders>
<loggers>
<root level="trace">
<appender-ref ref="MyFileAppender"/>
</root>
</loggers>
</configuration>
It exists in the classpath of the project and I tried putting it in many other directories..
I created a logger in the code like so:
Logger logger = LogManager.getLogger(MyClass.class.getName());
logger.info("test");
And nothing is written and no file is created. When I debug the code I see that the logger is the default logger(console).
you should put your log4j2.xml into the classpath.
or set "log4j.configurationFile" system property to force to use your log4j2.xml
Please refer to: http://logging.apache.org/log4j/2.x/manual/configuration.html#AutomaticConfiguration
Where exactly? There is often confusion about where "in the classpath" means. It can't just be anywhere. It has to be at the 'top' or the 'default package'.
I had the problem, I tried some solutions, but only this worked to me:
Go to web.xml, and add this parameter:
place
log4j2.xml
file undersrc/main/resources
. It worksA tip for eclipse users:
Right click on the project and click "refresh". Make sure you could see the log4j2.xml file in eclipse. (This solved my problem.)
To be verbose:
You shouldn't add the file to build path.(If you do, eclipse will warn you about this)
The name of this file doesn't appear in '.classpath' file.
Actually This is a straight forward process. Two main classes of Log4j 2 are as follows that you need to import like this:
Now get a
Logger
instance by using this code.Note I didn't specified the class name to
getLogger()
method as a parameter. Log4j 2 automatically figures it out.Now you can use any of the
info(), trace(), debug(), warn(), error(), fatal()
method from theLogger
class. But to get the output from all of these methods you'll need a XML configuration file. By default Log4j 2 only produces output from theerror() and fatal()
methods.Configuration file is as follows:
Save this file with any name any where. I use Log4j2.xml as name. Now you'll need this file to be put in classpath, which you can do by passing a system property when running the program as follows:
And you've done it. Logging will be right away on your console.
Special Notes:
In XML file I've provided 2 appenders: A file and a console. You can see that you just need to uncomment the commented
AppenderRef
tag to get output in a file instead of console.You can also provide an environment variable as a system property. Log4j 2 will read the configuration file from the environment variable first and then in
-D
argument if not found an environment variable.Have fun with logging. :-)