2015-10-29 5 views
0

Я пытаюсь добавить log4j logging, чтобы журналы записывались в файл.log4j не записывается в файл в java

Моя программа java выполнена из ThreadingTest.java и начинается 4 потока. Один из потоков запускает ThreadingHDFSUsage.java код, и я пытаюсь записать журналы из этого класса в файл.

Вот мой log4j.property файл:

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 

Вот моя структура проекта:

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

Вот мой threading.test код Java класс:

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); 



     } 
    } 
} 

Здесь это мой ThreadingHDFSUsage.java код:

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]; 


    } 
} 

После выполнения кода, я не получаю файл журнала, созданный в упомянутом месте и получить следующий консольный вывод:

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. 

Пожалуйста, помогите, так как я не смог заставить его работать.

ответ

0

Попробуйте использовать стандартное расширение файла .properties для вашего конфигурационного файла log4j. Это может сделать трюк.

+0

После прочтения вашего ответа. Я изменился, и это сработало ... спасибо .. Но как я могу убедиться, что каждый класс потока создает отдельный файл? Что нужно добавить в файл log4j.properties. Скажем, у меня есть другой класс Thread для запуска с именем ThreadingRAMandContainers –

+0

рад, что сработал. вы можете посмотреть на это: http://stackoverflow.com/questions/8355847/how-to-log-multiple-threads-in-different-log-files – Remi

+0

спасибо за помощь –

Смежные вопросы