Tuesday, December 06, 2011

Logging using java.util.logging.Logger (Custom logging)

Sometimes in our application we need to log different messages like info,warning,error etc.Here i have given a way how we can use it in our application.
Following 'Log' class creates different log files taking different logger value by input and it also maintains the directory structure of log files according to the value of 'path'  passed to the constructor of 'Log' class.For example, if we 'll pass a parameter 'utils.Example',it will create a file 'logs/utils/Example.log' in the current directory.
Note:First it checks for the directory 'logs/utils' is present or not if it is not present it creates the directory.

//Log.java
  1. package utils;
  2. import java.io.File;
  3. import java.io.IOException;
  4. import java.util.logging.FileHandler;
  5. import java.util.logging.Logger;
  6. import java.util.logging.SimpleFormatter;
  7.  
  8. public class Log {
  9.  
  10.   static FileHandler handler;
  11.   static Logger logger;
  12.  
  13.   public static void createLog(String path){
  14.     try {
  15.       String [] s = path.split("\\.");
  16.       File f = new File("./"+"logs/"+s[s.length-2]);
  17.       if(f.exists()==false){
  18.         f.mkdirs();
  19.       }
  20.       handler = new FileHandler("logs/"+s[s.length-2]+"/"+s[s.length-1]+".log");
  21.       handler.setFormatter(new SimpleFormatter());
  22.       logger = Logger.getLogger(path);
  23.       logger.addHandler(handler);
  24.      } catch (IOException e) {
  25.         e.printStackTrace();
  26.      }
  27.   }
  28.  
  29.   public static void loggerINFO(String msg){
  30.      logger.info(msg);
  31.   }
  32.  
  33.   public static void loggerWARN(String msg){
  34.      logger.warning(msg);
  35.   }
  36.  
  37.   public static void loggerERROR(String msg){
  38.      logger.severe(msg);
  39.   }
  40. }
//Example.java
  1. package utils;
  2. import static utils.Log.loggerINFO;
  3. import static utils.Log.loggerWARN;
  4. import static utils.Log.loggerERROR;
  5.  
  6. public class Example {
  7.  
  8.    public Example() {
  9.      Log.createLog(this.getClass().getName());
  10.    }
  11.  
  12.    public void method1(){
  13.      loggerINFO("Doing division by zero");//Log an INFO message
  14.      loggerWARN("May get ArithmeticException");//Log a WARNING message
  15.      try {
  16.        int i = 20/0;
  17.      } catch (Exception e) {
  18.        loggerERROR(e.getMessage());//Log a SEVERE message
  19.      }
  20.    }
  21.  
  22.    public static void main(String[] args) {
  23.      new Example().method1();
  24.    }
  25. }
After running this we 'll get a log file 'logs/utils/Example.log' (In eclipse,if 'Example.java' is in 'utils' package ,you 'll find a log file 'Example.log' in the 'logs' folder which is generated parallel to 'src' folder of the current project)
Note: Everytime you run the 'utils/Example.java' you 'll get a fresh file with new content.

//Content of 'logs/utils/Example.log' after running 'utils/Example.java'

Dec 6, 2011 6:37:33 PM utils.Log loggerINFO
INFO: Doing division by zero
Dec 6, 2011 6:37:33 PM utils.Log loggerWARN
WARNING: May get ArithmeticException
Dec 6, 2011 6:37:33 PM utils.Log loggerERROR
SEVERE: / by zero

No comments:

Post a Comment