【问题标题】:log4j not logging to file in javalog4j没有记录到java中的文件
【发布时间】:2015-10-29 17:34:28
【问题描述】:

我正在尝试添加 log4j 日志记录,以便将日志写入文件。

我的 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.

请帮忙,因为我无法让它工作。

【问题讨论】:

    标签: java multithreading logging


    【解决方案1】:

    尝试为您的 log4j 配置文件使用标准文件扩展名“.properties”。这可能会奏效。

    【讨论】:

    • 阅读您的答案后。我改变了,它工作了......谢谢..但是我怎样才能确保每个线程类创建一个单独的文件?应该将什么添加到 log4j.properties 文件中。假设我有另一个 Thread 类要运行,名称为 ThreadingRAMandContainers
    • 很高兴工作。你可能想看看这个:stackoverflow.com/questions/8355847/…
    猜你喜欢
    • 1970-01-01
    • 2014-08-18
    • 2017-09-25
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多