Friday, April 05, 2013

Logging application log to a log file(by File Appender)

To log your application log to a log file by using log4j, you have to go through the following steps:
  1. Download latest jar of log4j.jar and add it to your project classpath.
  2. Create a log4j.properties file inside your source directory to define properties of your logger.
  3. To log your application log to a log file, you need to add the following code in the log4j.properties
  4.  
    #################################################################
    #####     Application Logs to be printed in the log file    #####
    #################################################################
     
    log4j.rootLogger= WARN, FILE_APPENDER
    
    # test appender  daily rolling logs format
    log4j.appender.FILE_APPENDER=org.apache.log4j.DailyRollingFileAppender
    log4j.appender.FILE_APPENDER.File=logs/autoLog.log
    log4j.appender.FILE_APPENDER.DatePattern='.'yyyy-MM-dd
    log4j.appender.FILE_APPENDER.layout=org.apache.log4j.PatternLayout
    log4j.appender.FILE_APPENDER.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p (%F:%M:%L) - %m%n
    
    # test appender  daily rolling logs for packages
    log4j.logger.com.myorg=DEBUG
    log4j.logger.com.myorg.core.util=FILE_APPENDER
    log4j.logger.com.myorg.core.page=FILE_APPENDER
    
  5. To know the usage of logger see the below code:
    //In ConfigUtil.java
    private static Logger log = Logger.getLogger(ConfigUtil.class);
    // The below line is called inside static block
    log.info("Properties file loaded at '" + configLoc + "'");
    
    //In BasePage.java
    protected static Logger log = Logger.getLogger(BasePage.class);
    // The below line is called inside setTimeout() method
    log.info("The timeout value is set to " + timeoutSeconds + " seconds.");
    
    //In DriverManager.java
    private static Logger log = Logger.getLogger(DriverManager.class);
    // The below line is called inside static block
    log.info("Driver location is set to '" + driverLoc + "'");
    
  6. You will get your application log in the log file(which you have specified in your log4j.properties, in this example i have specified "logs/autoLog.log" file) as shown in the below sample:
     
    2013-09-05 12:36:04  INFO (ConfigUtil.java::39) - Properties file loaded at '/Users/aksahu/MySpace/Web_Workspace/KnowledgeBase/config/config.properties'
    2013-09-05 12:36:04  INFO (BasePage.java:setTimeout:155) - The timeout value is set to 60 seconds.
    2013-09-05 12:36:04  INFO (DriverManager.java::54) - Driver location is set to '/Users/aksahu/MySpace/Web_Workspace/CoreDriver/drivers/'
    2013-09-05 12:36:04  INFO (DriverManager.java:getDriver:85) - initializing 'chrome' driver...
    2013-09-05 12:36:15  INFO (BasePage.java:windowMaximize:101) - Maximizing the browser window.
    2013-09-05 12:36:17  INFO (BasePage.java:openUrl:86) - Openning the url 'http://knowledgebase-wiki.appspot.com/' in the browser...
    2013-09-05 12:36:23  INFO (BasePage.java:waitForPageToLoad:956) - Waiting for page to load...
    2013-09-05 12:36:23  INFO (BasePage.java:typeByID:195) - Entering text 'java' to the element specified by id 'searchField'
    2013-09-05 12:36:23  INFO (BasePage.java:clickByID:258) - Clicking on the element specified by id 'resultDiv0'
    2013-09-05 12:36:23  INFO (BasePage.java:waitForElementLocatedByXpath:848) - Waiting for the element specified by xpath '//a[contains(text(),'[Go to page]')]'
    2013-09-05 12:36:23  INFO (BasePage.java:clickByXpath:238) - Clicking on the element specified by xpath '//a[contains(text(),'[Go to page]')]'
    2013-09-05 12:36:24  INFO (BasePage.java:waitForPageToLoad:956) - Waiting for page to load...
    2013-09-05 12:36:24  INFO (BasePage.java:isTextPresent:807) - Checking for the text 'Installing Java' in the page
    2013-09-05 12:36:24  INFO (BasePage.java:isTextPresent:807) - Checking for the text 'java' in the page
    2013-09-05 12:36:24  INFO (BasePage.java:quitBrowser:582) - Closing all the instances of the browser 'chrome'
    

Logging application log in the Console(by Console Appender)

To log your application log in the console by using log4j, you have to go through the following steps:
  1. Download latest jar of log4j.jar and add it to your project classpath.
  2. Create a log4j.properties file inside your source directory to define properties of your logger.
  3. To log your application log in the console, you need to add the following code in the log4j.properties
  4.  
    ################################################################
    #####     Application Logs to be printed in the console    #####
    ################################################################
     
    log4j.rootLogger= WARN, CONSOLE_APPENDER
    
    # console appender format
    log4j.appender.CONSOLE_APPENDER=org.apache.log4j.ConsoleAppender
    log4j.appender.CONSOLE_APPENDER.layout=org.apache.log4j.PatternLayout
    log4j.appender.CONSOLE_APPENDER.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %5p (%F:%M:%L) - %m%n
    
    # console appender for packages
    log4j.logger.com.myorg=DEBUG
    log4j.logger.com.myorg.core.util=CONSOLE_APPENDER
    log4j.logger.com.myorg.core.page=CONSOLE_APPENDER
    
  5. To know the usage of logger see the below code:
    //In ConfigUtil.java
    private static Logger log = Logger.getLogger(ConfigUtil.class);
    // The below line is called inside static block
    log.info("Properties file loaded at '" + configLoc + "'");
    
    //In BasePage.java
    protected static Logger log = Logger.getLogger(BasePage.class);
    // The below line is called inside setTimeout() method
    log.info("The timeout value is set to " + timeoutSeconds + " seconds.");
    
    //In DriverManager.java
    private static Logger log = Logger.getLogger(DriverManager.class);
    // The below line is called inside static block
    log.info("Driver location is set to '" + driverLoc + "'");
    
  6. You will get your application log as shown in the below example:
     
    [TestNG] Running:
      /private/var/folders/cl/34rlg3ns31g8w4jktmpkc2440000gn/T/testng-eclipse--1656210619/testng-customsuite.xml
    
    2013-09-05 12:58:03  INFO (ConfigUtil.java::39) - Properties file loaded at '/Users/ashwin/MySpace/Web_Workspace/KnowledgeBase/config/config.properties'
    2013-09-05 12:58:03  INFO (BasePage.java:setTimeout:155) - The timeout value is set to 60 seconds.
    2013-09-05 12:58:03  INFO (DriverManager.java::54) - Driver location is set to '/Users/ashwin/MySpace/Web_Workspace/CoreDriver/drivers/'
    2013-09-05 12:58:03  INFO (DriverManager.java:getDriver:85) - initializing 'chrome' driver...
    2013-09-05 12:58:09  INFO (BasePage.java:windowMaximize:101) - Maximizing the browser window.
    2013-09-05 12:58:12  INFO (BasePage.java:openUrl:86) - Openning the url 'http://knowledgebase-wiki.appspot.com/' in the browser...
    2013-09-05 12:58:18  INFO (BasePage.java:waitForPageToLoad:956) - Waiting for page to load...
    2013-09-05 12:58:18  INFO (BasePage.java:typeByID:195) - Entering text 'java' to the element specified by id 'searchField'
    2013-09-05 12:58:19  INFO (BasePage.java:clickByID:258) - Clicking on the element specified by id 'resultDiv0'
    2013-09-05 12:58:19  INFO (BasePage.java:waitForElementLocatedByXpath:848) - Waiting for the element specified by xpath '//a[contains(text(),'[Go to page]')]'
    2013-09-05 12:58:19  INFO (BasePage.java:clickByXpath:238) - Clicking on the element specified by xpath '//a[contains(text(),'[Go to page]')]'
    2013-09-05 12:58:19  INFO (BasePage.java:waitForPageToLoad:956) - Waiting for page to load...
    2013-09-05 12:58:19  INFO (BasePage.java:isTextPresent:807) - Checking for the text 'Installing Java' in the page
    2013-09-05 12:58:19  INFO (BasePage.java:isTextPresent:807) - Checking for the text 'java' in the page
    2013-09-05 12:58:19  INFO (BasePage.java:quitBrowser:582) - Closing all the instances of the browser 'chrome'
    PASSED: testJavaModule
            Verifies the Java Module form Knowledge base
    
    ===============================================
        Default test
        Tests run: 1, Failures: 0, Skips: 0
    ===============================================