Saturday, January 8, 2011

Log4j - The best logging implementation in Java

While developing the applications, some times we need to log the some data or some information message or errors into a separate file. For Java based web applications, we use Log4j api to implement this functionality.


Log4j has three main components: loggers, appenders and layouts. These three types of components work together to enable developers to log messages according to message type and level, and to control at run time how these messages are formatted and where they are reported.

Loggers may be assigned levels. The set of possible levels, that is:
TRACE,
DEBUG,
INFO,
WARN,
ERROR and
FATAL

Log4j is providing different appenders. Using these appenders user can append the messages to different messages medias. The basic appenders of Log4j are:

1. Console Appender
2. File Appender
3. Daily rolling file appender
4. Email Appender
5. SMS appender.

User can control these appenders from the log4j configurations files called log4j.properties or log4j.xml.

User can define different layouts for the logging message called Simple layout, Flow layout ... etc.


Log4j Examples:


The basic example to implement the Log4j:
import org.apache.log4j.Logger;

public class LogExample {

    public LogExample() {
    }
    static Logger log = Logger.getLogger(LogExample.class);

    public static void main(String argsp[]) {
       
        log.debug("projectname-modulename-Class-method-Here is some DEBUG");
        log.info("projectname-modulename-Class-method-Here is some INFO");
        log.warn("projectname-modulename-Class-method-Here is some WARN");
        log.error("projectname-modulename-Class-method-Here is some ERROR");
        log.fatal("projectname-modulename-Class-method-Here is some FATAL");
        log.warn("projectname-modulename-Class-method-Here is some WARN");
     
   }
}



 The sample example to read the log4j configurations from properties file:
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;


public class Example2  {
   
    public static void main(String a[])
    {
        Logger l=Logger.getLogger(Example2.class);
   
        PropertyConfigurator.configure("src/prop.properties");
         
          l.setLevel(Level.DEBUG);
          l.debug("Myprojectname-modulename-Class-method-ok executedddddddddddddd");
          l.info("projectname-modulename-Class-method-some infoooooooooo");
          l.warn("projectname-modulename-Class-method-warn msg");
          l.error("projectname-modulename-Class-method-error msg......");
          l.fatal("projectname-modulename-Class-method-this is some fatal errrrrrrr");
    }
}


Log4j configurations in properties file:  prop.properties
log4j.rootLogger=debug, stdout
log4j.appender.stdout=org.apache.log4j.DailyRollingFileAppender
log4j.appender.stdout.File=logs/dailyrollfile3333.txt
log4j.appender.stdout.DatePattern='.'yyyy-MM-dd-HH-mm
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%r  [%t]  %p  %c  %m  %d  %n                    



 Implementing log4j with Console appender :

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

import org.apache.log4j.ConsoleAppender;
import org.apache.log4j.Layout;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.SimpleLayout;

//ConsoleAppender
public class Example1 {
   
public static void main(String a[])
{
    Logger l=Logger.getLogger(Example1.class);
    Layout lay=new SimpleLayout();
ConsoleAppender ap=new ConsoleAppender(lay);

l.addAppender(ap);
l.setLevel(Level.DEBUG);

  try{
Class.forName("oracle.jdbc.driver.OracleDriver");
l.debug("driver loaded");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.214:1521:XE","kiran","kiran");
l.info("connection established successfully");

  }catch(ClassNotFoundException e)
  {
      l.fatal(" OOPS.........DriverClass Problem(plz check Driverclass)");
      e.printStackTrace();
  }catch(SQLException se)
  {
      l.fatal("OOPS............Db Connection Problem");
      se.printStackTrace();
  }
  catch(Exception se)
  {
      l.error("OOPS............Db Problem");
      se.printStackTrace();
  }
   
}
}



File Appender example in Log4j :

import java.sql.Connection;
import java.sql.DriverManager;

import org.apache.log4j.*;

//FileAppender

public class Example2  {
   
    public static void main(String a[])
    {
        Logger l=Logger.getLogger(Example2.class);
          try{
    Layout lay=new SimpleLayout();
    FileAppender ap=new FileAppender(lay,"sample.log",true);
    l.addAppender(ap);
    l.setLevel(Level.DEBUG);
          }catch(Exception d)
          {
              l.debug("log4j stmts problem");
          }
    try{
    Class.forName("oracle.jdbc.driver.OracleDriver");
    l.debug("driver loaded......");
    Connection con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.214:1521:XE","kiran","kiran");
    l.info("connection established successfully..........");
   
      }catch(Exception e)
      {
          l.fatal("Db Problem");
          e.printStackTrace();
      }
       
    }
}

No comments: