Tuesday 4 August 2015

Configure Log4j.properties in java

Step 1: Download Log4j jar file. You can download from Apache Log4j
Step 2: Create a simple class named 'LoggerExample.java'
Step 3: Create log4j.properties file
Step 4: Attach log4j dependency to class path.

package com.log.test;

import org.apache.log4j.Logger;

public class LoggerExample {

     // get a logger instance
    public static Logger logger = Logger.getLogger(LoggerExample.class);

    public void testLoggerDebug() {
        logger.debug("Hello.. im in Debug method");
    }

    public void testLoggerInfo() {
        logger.info("Hello.. im in Info method");
    }

    public void testLoggerWarn() {
        logger.warn("Hello.. im in Warn method");
    }

    public void testLoggerError() {
        logger.error("Hello.. im in Error method");
    }

    public void testLoggerFatal() {
        logger.fatal("Hello.. im in Fatal method");
    }

    public static void main(String[] args) {
        LoggerExample example = new LoggerExample();
        example.testLoggerDebug();
        example.testLoggerInfo();
        example.testLoggerWarn();
        example.testLoggerError();
        example.testLoggerFatal();
    }
}
 --------------------------------
Log4j allows logging requests to print statements to multiple destinations. Here an output destination is called an appender. Currently, appenders exist for the ConsoleAppender appends log events to System.out or System.err using a layout specified by the user. The default target is System.out.

and FileAppender appends log events to a file. We also have RollingFileAppender which extends FileAppender to backup the log files when they reach a certain size. The default maximum size of a file is 10MB.

Now let us see the sample Log4j.properties file.

#### Using only one appenders, i.e. to log to console 
#Set logging level
log4j.rootCategory=debug, console
 
#### Appender which writes to console 
log4j.appender.console=org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{MM-dd-yyyy HH:mm:ss} %F %-5p [%t] %c{2} %L - %m%n

----------------
In the same way, we can also create an other appender to log to an external file. Log files will give us certain information about when a program was started, how much time it took to start the server, where errors are coming from, how often errors return, and how they are etc. We can have access to logs and should monitoring when ever required.

Now after adding the second appendar to log4j.properties file, It should look like below:

# Use two appenders, one to log to console, another to log to a file 
#Set level
log4j.rootCategory=debug, console, file 
 
# Appender which writes to console 
log4j.appender.console=org.apache.log4j.ConsoleAppender 
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{MM-dd-yyyy HH:mm:ss} %F %-5p [%t] %c{2} %L - %m%n
 
# Appender which writes to a file 
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=log4j-application.log
 
# Defining maximum size of a log file
log4j.appender.file.MaxFileSize=5mb 
log4j.appender.file.MaxBackupIndex=5 
log4j.appender.file.layout=org.apache.log4j.PatternLayout 
log4j.appender.file.layout.ConversionPattern=%d{ISO8601} %5p [%t] %c{1}:%L - %m%n

-------------------------
In the above log4j.properties file, PatternLayout lets the user to specify the output format according to conversion patterns. The below are the few patterns that are mostly used:

# Each conversion specifier starts with a percent sign (%) and is followed by optional format modifiers and a conversion character
# %d{dd MMM yyyy HH:mm:ss,SSS} - Used to output the date of the logging event, we can specify date format specifier enclosed between braces
# %F - Used to print file name
# %-5p means the priority of the logging event should be left justified to a width of five characters.
# %t - Used to output the name of the thread that generated the logging event.
# %L - Used to output the line number from where the logging request was issued.
# %m - Used to output the application supplied message associated with the logging event.
# %M - Used to output the method name where the logging request was issued.
#%d{ISO8601}Formats a Date in the format "yyyy-MM-dd HH:mm:ss,SSS" for example "1999-11-27 15:49:37,459".
#%d{HH:mm:ss,SSS} Used to output the date of the logging event. If no date format specifier is given then ISO8601 format is assumed by default.

After executing the above program, the output should look like below:

07-30-2015 01:10:50 LoggerExample.java DEBUG [main] test.LoggerExample 12 - Hello.. im in Debug method
07-30-2015 01:10:50 LoggerExample.java INFO  [main] test.LoggerExample 17 - Hello.. im in Info method
07-30-2015 01:10:50 LoggerExample.java WARN  [main] test.LoggerExample 22 - Hello.. im in Warn method
07-30-2015 01:10:50 LoggerExample.java ERROR [main] test.LoggerExample 27 - Hello.. im in Error method
07-30-2015 01:10:50 LoggerExample.java FATAL [main] test.LoggerExample 32 - Hello.. im in Fatal method

No comments:

Post a Comment