2016-06-17 4 views
0

주어진 기간 동안 지정된 excpetions 집합이 발생하면 관리자에게 전자 메일을 보내는 포틀릿을 개발하려고합니다. 필자는 appender를 추가하고 로깅 메커니즘을 통과하는 모든 메시지를 처리 ​​할 수 ​​있도록 liferay에서 루트 로거를 얻으려고합니다. 소스 코드를 살펴본 결과, liferay가 java.util.logging.LogManager를 사용하고있는 것으로 보입니다. 나는 서버가 시작할 때 시작되는 후크를 만들었다.Liferay, 루트 로거를 얻는 방법?

public void run(String[] ids) throws ActionException { 
    System.out.println("initializing");  

    LogListener listener = new LogListener(); 
    listener.setLevel(Level.ALL); 
    listener.setFilter(null); 
    Logger.getGlobal().addHandler(listener); 

    _log.debug("complete"); 
} 

그리고 LogListener 클래스

package pl.com.mds.portlet.mailing.hook; 

import java.util.logging.Handler; 
import java.util.logging.LogRecord; 

public class LogListener extends Handler { 

    @Override 
    public void publish(LogRecord record) { 
     System.out.println("publishing******"); 

    } 

    @Override 
    public void flush() { 
     // TODO Auto-generated method stub 
     System.out.println("have to flush! *****"); 
    } 

    @Override 
    public void close() throws SecurityException { 
     // TODO Auto-generated method stub 
     System.out.println("close meee!"); 
    } 

} 

그러나 일부 예외가 발생했을 때 콘솔 publishing****** 유일한 예외의 스택 트레이스에서 볼 수 없습니다 : 여기 내 run() 메소드이다. 응용 프로그램과 수신에 모든 로그를 가져올 수 있습니까? 감사합니다 :)

+0

이상한. Liferay 문서에는 [log4j 사용] (https://web.liferay.com/community/wiki/-wiki/Main/How+to+configure+the+logs+in+Liferay/)이 사용된다고 나와 있습니다. – jmehrens

답변

1

루트 로거는 표준 절차 Logger.getLogger ("logger name goes here")를 통해 얻을 수 있습니다. 루트 로거에는 이름으로 빈 문자열이 있습니다. 따라서 다음과 같이 코드를 편집해야합니다. Logger.getLogger("").addHandler(listener);

+0

당신의 솔루션이 작동하지 않는 것처럼 보입니다. ( –

+0

간단한 자바 프로그램에서 테스트되었고 동작합니다. 코드를 붙여 넣고 복사하여 한 줄 수정했습니다. – Marat

0

LogFactoryUtil 사용을 고려하십시오. 다음과 같이

private static final Log LOG = LogFactoryUtil.getLog(MyPortlet.class); 
관련 문제