Friday, November 15, 2019

Log4j implementation to generates the logs



  •  Include log4j dependency on project by adding in pom.xml file 


                  <dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>


  • Create log4j.xml file under root folder of project  . 
                    <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration
xmlns:log4j="http://jakarta.apache.org/log4j/" debug="false">
<appender name="consoleAppender" class="org.apache.log4j.ConsoleAppender">
<param name="Threshold" value="INFO" />
<param name="File" value="logfile.log" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
</layout>
</appender>
<root>
<level value="INFO" />
<appender-ref ref="consoleAppender" />
</root>
</log4j:configuration>



  • Create log4j.properties under resources folder 

# Root logger option
log4j.rootLogger=INFO, file, CONSOLE_APPENDER

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
#log4j.appender.file.File=C:\\logging.log
log4j.appender.file.File=${user.dir}/Log4j/logfile.log
log4j.appender.file.MaxFileSize=10MB
log4j.appender.file.MaxBackupIndex=10
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Direct log messages to CONSOLE_APPENDER
log4j.appender.CONSOLE_APPENDER=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE_APPENDER.File=${user.dir}/Log4j/logfile.log
log4j.appender.CONSOLE_APPENDER.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE_APPENDER.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n


NOTE : make sure parameter of log4j.properties and log4j.xml file should have same name
     
Project structure  in eclipse looks like : ProjectName
                                                                     |
                                                                     |- src
                                                                     | 
                                                                     |_resources
                                                                                   |_log4j.properties


  • Class level implementation :

import org.apache.log4j.Logger;
import org.apache.log4j.xml.DOMConfigurator;

public class CopyFileToServer {
// log4j
private static final Logger logger = Logger.getLogger(CopyFileToServer.class);


    public static void main(String[] args)
    {       // log4j
   

 BasicConfigurator.configure(); DOMConfigurator.configure(System.getProperty("user.dir")+File.separator+"log4j.xml");
    Log.debug("This is debug message ");
    Log.info("Initializing the file path to check ");

    File srcFolder = new File("C:\\Users\\s.gainewar\\Desktop\\test");
    File destFolder = new File("G:\\QS\\TEMP");
        //make sure source exists
    if(!srcFolder.exists()){
    Log.info("Directory does not exist.");
           System.out.println("Directory does not exist.");
           //just exit
           System.exit(0);
        }else{
           try{
        copyFolder(srcFolder,destFolder);
           }catch(IOException e){
        e.printStackTrace();
        //error, just exit
                System.exit(0);
           }
        }
        System.out.println("Done");
    }
 
    public static void copyFolder(File src, File dest)
    throws IOException{
        if(src.isDirectory()){
        //if directory not exists, create it
    if(!dest.exists()){
       dest.mkdir();
       Log.info("Directory copied from "
                              + src + "  to " + dest);
       System.out.println("Directory copied from "
                              + src + "  to " + dest);
    }
        //list all the directory contents
    String files[] = src.list();
        for (String file : files) {
       //construct the src and dest file structure
       File srcFile = new File(src, file);
       File destFile = new File(dest, file);
       //recursive copy
       copyFolder(srcFile,destFile);
    }
     
    }else{
    //if file, then copy it
    //Use bytes stream to support all file types
    InputStream in = new FileInputStream(src);
            OutputStream out = new FileOutputStream(dest);
                       
            byte[] buffer = new byte[1024];
     
            int length;
            //copy the file content in bytes
            while ((length = in.read(buffer)) > 0){
           out.write(buffer, 0, length);
            }

            in.close();
            out.close();
            System.out.println("File copied from " + src + " to " + dest);
    }
    }
                                                                                   
Exception Handling :

in cases getting an exception as below :

log4j:WARN No appenders could be found for logger (com.cashpoint.testauto.core.BetCal).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.


--> Two ways of handling it:
1. First one is to just add this line to your main method:
                    BasicConfigurator.configure();

2. Second approach is to add this standard log4j.properties (taken from the above mentioned guide) file to your classpath:


If want to configure log4j to get the different report format like html. 
  -  Add html log4j.properties file in resources directory with below configuration:

// Here we have defined root logger
log4j.rootLogger=DEBUG,INFO,CONSOLE,R,HTML,TTCC

// Here we define the appender
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.TTCC=org.apache.log4j.RollingFileAppender
log4j.appender.HTML=org.apache.log4j.FileAppender

// Here we define log file location
log4j.appender.R.File=./log/testlog.log
log4j.appender.TTCC.File=./log/testlog1.log
log4j.appender.HTML.File=./log/application.html

// Here we define the layout and pattern
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern= %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
log4j.appender.TTCC.layout=org.apache.log4j.TTCCLayout
log4j.appender.TTCC.layout.DateFormat=ISO8601
log4j.appender.HTML.layout=org.apache.log4j.HTMLLayout
log4j.appender.HTML.layout.Title=Application log
log4j.appender.HTML.layout.LocationInfo=true


No comments:

Post a Comment