Use the BasicConfigurator
to
read a log4j.properties
file
resource from the classpath. The following code configures Log4J from a
resource named log4j.properties
,
and logs two messages:
import org.apache.log4j.PropertyConfigurator; import org.apache.log4j.Logger; URL log4Jresource = this.getClass( ).getResource("log4j.properties"); PropertyConfigurator.configure( log4Jresource ); Logger log = Logger.getLogger( "com.discursive.SomeApp" ); log.info( "This is a log message" ); log.error( "This is an error message" );
The log4j.properties
file
contains a basic Log4J configuration that sets the root category logging
level to WARN
and the application's
logging level to DEBUG
:
# All logging output sent to standard out and a file # WARN is default logging level log4j.rootCategory=WARN, STDOUT, FILE # Application logging level is DEBUG log4j.logger.com.discursive=DEBUG # Configure the Standard Out Appender log4j.appender.STDOUT=org.apache.log4j.ConsoleAppender log4j.appender.STDOUT.layout=org.apache.log4j.PatternLayout log4j.appender.STDOUT.layout.ConversionPattern=%5p (%F:%L) %m%n # Configure a rolling file appender log4j.appender.FILE=org.apache.log4j.RollingFileAppender log4j.appender.FILE.File=output.log log4j.appender.FILE.MaxFileSize=2000KB log4j.appender.FILE.MaxBackupIndex=5 log4j.appender.FILE.layout=org.apache.log4j.PatternLayout log4j.appender.FILE.layout.ConversionPattern=%d %-5p %c - %m%n
This example prints a single info message to the console with the following format:
INFO (Sample.java:24) This is a log message ERROR (Sample.java:25) This is an error message
The rootCategory
is configured
to send all log messages to the console and a RollingFileAppender
. A file named output.log
contains the following content
after this code has been executed:
2004-06-14 00:12:22,324 INFO Sample - This is a log message 2004-06-14 00:12:22,326 ERROR Sample - This is an error message
PropertyConfigurator.configure()
takes a URL referencing a resource to be loaded from the
classpath. This properties file is read and Log4J is configured to send
all messages to both the console and a file. Content is written to a
file using a RollingFileAppender
,
which writes to a file until it reaches a configurable maximum size (2
MB). Once this size has been reached, a RollingFileAppender
will move the existing
output.log
file to a file named
output.log.1
and create a new
output.log
file. As configured in
the previous example, the RollingFileAppender
will keep five backup log
files, moving output.log.1
to
output.log.2
and output.log
to output.log.1
the next time a log file's
maximum size has been reached.
The Solution configures the default logging level to be WARN
, meaning that all log messages lower on
the level hierarchy will not be sent to appenders. Log4J has five
default levels, and they are listed in order of importance: DEBUG
, INFO
, WARN
,
ERROR
, and FATAL
. If a category is configured with a
logging level of ERROR
, only ERROR
and FATAL
messages are sent to appenders, and if a
category is configured with a logging level of DEBUG
, all logging messages are sent to
appenders. If you are only interested in the debugging output from your
own program, set the rootCategory
to
a high logging level, and override that level for your application's
classes. log4j.logger.com.discursive=DEBUG
overrides
the rootCategory
's logging level for
every topic at or below the com.discursive
logging category.
The properties file shown in the Solution should be used as a
starting point for Log4J configuration. For more information about
various implementations of Appender
or syntax for ConversionPattern
, see
the Log4J
API
documentation at http://logging.apache.org/log4j/docs/api/index.html.