0

I am trying to add log4j logging so that the logs are written to a file.

My java program is executed from ThreadingTest.java and it starts 4 threads. One of the Thread starts ThreadingHDFSUsage.java code and I am trying to write the logs from this class to a file.

Here is my log4j.property file:

log4j.rootLogger = DEBUG, FILE

# Define the file appender
log4j.appender.FILE=org.apache.log4j.FileAppender
log4j.appender.FILE.File=D:/Java/log.out

# Define the layout for file appender
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.conversionPattern=%m%n

Here is my project structure:

Project1
|
|---src/main/java
|                |---com.abcd.hadoop.monitoring.Hadoop_Monitoring_1
|                                                |---ThreadingTest.java
|                                                |---ThreadingHDFSUsage.java
|---src/main/resources
                      |---log4j.property

Here is my threading.test java class code:

import java.io.File;
import java.util.ArrayList;
import java.util.Hashtable;

import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.phantomjs.PhantomJSDriverService;
import org.openqa.selenium.remote.DesiredCapabilities;

import net.anthavio.phanbedder.Phanbedder;

public class ThreadingTest {

    public static File phantomjs = Phanbedder.unpack(); //Phanbedder to the rescue!

    public static void main( String[] args ) throws InterruptedException
    {
        //webdriver objects
        DesiredCapabilities dcaps = new DesiredCapabilities();
        dcaps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, phantomjs.getAbsolutePath());

        String namenode = "xx.xx.xx.xx";
        int j = 0;
        ArrayList<String> coreNodeName=new ArrayList<String>();
        ArrayList<String> coreNodeData=new ArrayList<String>();


        for (int i=0;i<3;i++){
            j=j+1;
            System.out.println("---------------------------------Try no: "+j+"---------------------------------------------");          
            Thread.sleep(10000);

              ThreadingHDFSUsage HDFSUsage=new ThreadingHDFSUsage(dcaps);  
              ThreadingRAMandContainers RAMandContainers=new ThreadingRAMandContainers(dcaps);  
              ThreadingCoreNodesHDFSUsage CoreNodesHDFSUsage=new ThreadingCoreNodesHDFSUsage(dcaps);
              ThreadingApplicationMonitoring ApplicationMonitoring= new ThreadingApplicationMonitoring(dcaps);

              HDFSUsage.start();  
              RAMandContainers.start();
              CoreNodesHDFSUsage.start();
              ApplicationMonitoring.start();

              HDFSUsage.join();  
              RAMandContainers.join();
              CoreNodesHDFSUsage.join();
              ApplicationMonitoring.join();

            //InfluxDataPush.sendData(namenode,OverallHDFSUsage1, RAMUsage1, TotalContainersCount, ContainersRunning,RAMAvailable, RAMReserved, TotalMaps,TotalReducers,RunningMapsCount,
                //  RunningReduceCount,FailedMapCount,FailedRedcueCount,KilledMapCount,KilledReduceCount,SuccessfulMapCount,SuccessfulReduceCount,CoreNodeNameAndData);



        }
    }
}

Here is my ThreadingHDFSUsage.java code:

package com.abcd.hadoop.monitoring.Hadoop_Monitoring_1;

import java.util.Properties;

import org.apache.log4j.Logger;
import org.openqa.selenium.phantomjs.PhantomJSDriver;
import org.openqa.selenium.remote.DesiredCapabilities;

public class ThreadingHDFSUsage extends Thread {

    //private PhantomJSDriver driver;

    private DesiredCapabilities dcaps;
    static Logger log = Logger.getLogger(ThreadingHDFSUsage.class.getName());

     public ThreadingHDFSUsage(DesiredCapabilities dcaps) {
        // TODO Auto-generated constructor stub
         this.dcaps = dcaps;
    }

    public void run(){  
        System.out.println("task HDFS Usage");

        PhantomJSDriver driver = new PhantomJSDriver(dcaps);
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
         System.out.println(".........HDFS Usage..........");
         log.debug("Hello this is a debug message");
         String OverallHDFSUsage[] = null;
        try {
            OverallHDFSUsage = HDFSUsage.getWebData(driver,"http://52.23.253.128:9101/dfshealth.html#tab-overview","//*[@id=\"tab-overview\"]/table[2]/tbody/tr[2]/td","");
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
         String OverallHDFSUsage1 = OverallHDFSUsage[0];


     }  
}

After executing the code, I do not get any log file created at mentioned location and get following in console output:

PhantomJS is launching GhostDriver...
[INFO  - 2015-10-29T17:19:26.710Z] GhostDriver - Main - running on port 22157
log4j:WARN No appenders could be found for logger (org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager).
log4j:WARN No appenders could be found for logger (org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager).
log4j:WARN No appenders could be found for logger (org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

Please help since i am not able to get it work.

Amandeep Singh
  • 297
  • 4
  • 19

1 Answers1

0

Try using the standard file extension ".properties" for your log4j config file. This might do the trick.

Remi
  • 151
  • 3
  • After reading your answer. I changed and it worked...thanks.. But how can i make sure that each thread class creates a separate file? What should be added to log4j.properties file. Say i have another Thread class to run with name ThreadingRAMandContainers – Amandeep Singh Oct 29 '15 at 17:48
  • glad that worked. you might want to look at this : http://stackoverflow.com/questions/8355847/how-to-log-multiple-threads-in-different-log-files – Remi Oct 29 '15 at 17:52