Three main component of Log4J
The architecture of Log4J framework is layered and consists of three main components. There components of the Log4J are:
1. Logger
Logger is the most essential component of the logging process. It is responsible for capturing the logging information. There are 5 different log levels of the Logger. The level of Logger are as following:
There are 5 normal levels of logger:
In addition, there are two special levels also they are:
You can also set the logger level by putting a simple code like
logger.setLevel((Level)Level.WARN); |
2. Appenders in Log4J:
The Appender is responsible for publishing the log to a destination. It controls how the logging provides the output.
There are few list of appenders listed below:
ConsoleAppender is used as:
ConsoleAppender appender = new ConsoleAppender(new PatternLayout()); |
FileAppender
is used as:
FileAppender appender = new FileAppender(new PatternLayout(),"filename"); |
WriterAppender
is used as:
appender = new WriterAppender(new PatternLayout(),new FileOutputStream("filename")); |
3. Layouts in Log4J:
For each Appender it needs to have an associated Layout, which guides how to format the output. The Layout is responsible for formatting the log output in different layouts. User can control the output format by modifying the Log4J configuration file.
There are basically three types of Layout:
Configuring Log4J
For running application using Log4J you need to download
the latest version log4j jar file and then add this to the classpath.
There are two ways to configure the Log4J one is by using properties file and other by using xml file. Using xml for Log4J is quite popular and it is recommended also.
In the next section we will download Log4J libraries, install and then run a small program.
log4j.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration SYSTEM "log4j.dtd" > <log4j:configuration> <appender name="stdout" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n"/> </layout> </appender> <root> <priority value="debug"></priority> <appender-ref ref="stdout"/> </root> </log4j:configuration> |
Log4j looks for log4j.xml file first and then go for log4j.properties hence you must place both the files in your folder. We use log4j.xml since properties file does not provide some advanced configuration options such as Filter , some of ErrorHandlers, and few advanced Appenders .
log4j.properties
log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n log4j.rootLogger=debug, stdout
Here is our SimpleLog class code:
SimpleLog.java
import org.apache.log4j.*; public class SimpleLog { static Logger logger = Logger.getLogger ( "SimpleLog.class" ) ; public static void main ( String [] args ) { logger.debug ( "Welcome to Log4j" ) ; } } |
Users more often wish to customize their output according to their output format. Layout can be set by attaching it with the appender. The Layout is responsible for formatting the logging output.
There are following layout classes in Log4j:
Pattern Layout :
In our this section we are describing about most general layout PatternLayout . It is a flexible layout configurable with its pattern string. A conversion pattern consists of literal text and format control expressions. Here is the list of some of the conversion characters used for formatting:
Character | Effect |
c | Used to output the category of logging event |
C | Used to output the fully qualified class name of the caller issuing the logging request |
d | Used to output date of the logging event |
m | Used to output the application supplied message associated with the logging event |
n | Outputs the platform dependent line separator character or characters |
p |
Used to output the priority of the logging event |
r | Used to output the number of milliseconds elapsed from the construction of the layout until the creation of the logging event |
t | Used to output name of thread of logging event |
F | Used to output the file name |
A simple example of log4j for Servlethis Example shows you how to create a log in a Servlet.
LoggingServlet : import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.log4j.Logger; public class LoggingServlet extends HttpServlet { private static Logger logger = Logger.getLogger ( LoggingServlet. class ) ; protected void processRequest ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { response.setContentType ( "text/html;charset=UTF-8" ) ; PrintWriter writer = response.getWriter () ; try { logger.info ( "invoked the LoggingServlet..." ) ; writer.println ( "Check your web server console..." ) ; writer.flush () ; writer.close () ; } finally { writer.close () ; } } protected void doGet ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { processRequest ( request, response ) ; } protected void doPost ( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { processRequest ( request, response ) ; } }
|