Log4j Logging

Put the log4j and commons-logging.jar in the build path. These jar files contain the information for logging set up.
Declare the following as a class attribute in the class where you want to implement the logging, say SomeClass.java

private static Logger logger = Logger.getLogger(com.mattiz.SomeClass.class);

You would have a sample log4j properties configuration file which you should put in your classpath.
Suppose you wanted the words “Test Debug” in the following line to go to your log file, then use logger.error or logger.debug or logger.warn.

Viz. logger.error(“Test Debug”);

For warning/ debugging messages you could use

logger.warn(“This is a warning”);


logger.debug(“Variable value is”+var);

In the log4j configuration file you can set the level of logging.
In the sample configuration file you will find words like ERROR, WARN or DEBUG.
If you set the level to WARN, then only warnings and errors will print, while debug won’t print. If you set the level to DEBUG level then debug, info, warn and error will print.
These may go to the console or to a separate log output file based on the settings in the log4j configuration file. The log4j.properties contains settings to “rollover” files. If file becomes more than 1 MB then copying to another file and creating a new file is done automatically by log4j.
With the settings in the log4j.properties file you can control what is being logged. By setting it to ERROR level, debug statements won’t be printed in the production system.
For development use DEBUG level because you want to see debug messages.
The hierarchy is


If set to WARN level, all warn, error and fatal messages will be printed but no info and debug messages will be printed.
You can set logging levels for each package. So if you are working on a certain package you can set the package’s logging level to DEBUG, and another package’s logging level to WARN in the log4j properties file.
For example

log4j.category.com.mattiz.security = WARN

You need not use all the debugging levels; mostly people use DEBUG and ERROR.
You can put error level messages inside the catch block.
Error logs are like this

logger.error(“Exception critical”+ex.toString());

You can do this for production systems.

Contents of a simple log4j.properties configuration file

# Print FATAL, ERROR and WARN messages - do not print DEBUG and INFO messages
# the sequence is FATAL &gt; ERROR &gt; WARN &gt; INFO &gt; DEBUG
# since the level is set to WARN - message levels above it will be printed
# while levels below it will not be printed
log4j.rootCategory=WARN, stdout


# the conversion pattern will be used to format the timestamp see below example
# 2004-05-13 17:15:13,318 [Servlet.Engine.Transports : 1] DEBUG
# this will pre-pend all logging messages
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c{1} - %m%n

Contents of a more elaborate log4j.properties file

# the general level is set to WARN
# WARN, ERROR, FATAL will be printed
# In addition to printing to System Out, also print to "RollingFile"
log4j.rootCategory=WARN, stdout, RollingFile

# the level for the com.mattiz.web package (and sub-packages) is set to DEBUG
# DEBUG, WARN, ERROR, FATAL will be printed for the web package


# Print the date and time for systemOut
log4j.appender.stdout.layout.ConversionPattern=%d [%t] %-5p %c{1} - %m%n

# Save log to Rolling File Also
# Location of rolling file

# if the file becomes greater than 500KB then create a new file and backup the old file
# Keep 5 back up files


#Print the date and time for RollingFile
log4j.appender.RollingFile.layout.ConversionPattern=%d [%t] %-5p %c{1} - %m%n

About cuppajavamattiz
Matty Jacob - Avid technical blogger with interests in J2EE, Web Application Servers, Web frameworks, Open source libraries, Relational Databases, Web Services, Source control repositories, ETL, IDE Tools and related technologies.

Comments are closed.

%d bloggers like this: