복붙노트

[HADOOP] hadoop을 사용하는 동안 로거 API를 사용하여 자바 로그 파일을 작성하는 방법

HADOOP

hadoop을 사용하는 동안 로거 API를 사용하여 자바 로그 파일을 작성하는 방법

디버깅하려는 맵 축소 코드를 작성했습니다.

그렇게하기 위해서는 Hadoop 플랫폼이 오류가 발생하지 않는 한 화면에 출력하지 않기 때문에 표준 출력을 사용할 수 없습니다.

대신 로그 파일을 만들려면 로거를 사용하려고했습니다.

처리기를 사용하여 두 파일로 분할했습니다. 불행히도 "심한"로그 파일이 비어 있고 일반 로그 파일은 기본 스레드에서 발생하는 일만 기록하고 맵 축소 기능에서는 발생하지 않습니다.

문제는 다음과 같습니다.

hadoop 및 로그 파일에 문제가 있습니까? 아니면 로거 구성에 문제가 있습니까? 그렇다면 어떻게 수정해야하는지.

로그 구성 코드 : 전체 응용 프로그램에 대해 하나의 로거를 사용합니다 (이번에는 루트 로거입니다).

public static Logger configureLogging() 
    {
        try
        {
            logger=Logger.getLogger("");
            //FileSystem hdfs=FileSystem.get(URI.create(Misc.S3FS),getConfiguration());
            logger.setLevel(Level.ALL);

            //StreamHandler handler=new StreamHandler(hdfs.create(new Path(Misc.LOGS_PATH+"mylog.log")),new SimpleFormatter());
            FileHandler handler=new FileHandler(Misc.LOGS_PATH+"mylog.xml",true);   
            FileHandler severeHandler=new FileHandler(Misc.LOGS_PATH+"mylogSevere.xml",true);
            severeHandler.setLevel(Level.INFO);
            logger.addHandler(handler);
            logger.addHandler(severeHandler);

        }
        catch (Exception e) 
        {
            e.printStackTrace();
        }
        return logger;

    }

해결법

  1. ==============================

    1.Hadoop은 사전 구성된 log4j와 함께 제공됩니다. 두 클래스를 가져 오기만하면됩니다.

    Hadoop은 사전 구성된 log4j와 함께 제공됩니다. 두 클래스를 가져 오기만하면됩니다.

    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    

    이제 매퍼, 감속기 및 원하는 위치에 로거를 정의 할 수 있습니다.

    private static final Log LOG = LogFactory.getLog(MyClass.class);
    

    그리고 필요한 것을 기록하십시오 :

    LOG.info("My message");
    

    작업 실행 중에 메시지가 나타납니다. log4j 구성을 조정할 수 있습니다.

    conf/log4j.properties
    
  2. from https://stackoverflow.com/questions/12446379/how-to-write-java-log-file-using-the-logger-api-while-using-hadoop by cc-by-sa and MIT license