2013-08-09 2 views
0

이전 logger를 log4j로 바꿀 계획입니다. Logger를 직접 사용하는 대신 Logger를 상속받은 LocalLogger 클래스를 새로 만들어야합니다. 그 이유 - 이전 로거에서 사용할 수 있었던 새로운 로깅 메서드 이름이 필요합니다.log4j Logger 상속

protected final Logger logger = Logger.getLogger(getClass()); 

어떻게 로거가하는 것처럼 같은 방법으로 LocalLogger을 만들 수있는 기능을 할 :

나는 log4j에 로거가?

클래스 c를 super LocalLogger에 전달하는 방법은 무엇입니까? LocalLogger에 대한

초안 :

public class LocalLogger extends Logger{ 

    protected LocalLogger(String name) { 
     super(name); 
    } 

    public LocalLogger getLocalLogger(Class c) 
    { 
     return new LocalLoger(???) 
    } 

} 

답변

1

나는 당신이이 경우에 Logger을 연장하지 않는 것이 좋습니다. 대신 delegation pattern을 사용하십시오.

당신이하고자하는 방법과 새로운 클래스를 생성하지만, Logger의 내부 인스턴스에 로깅 호출을 위임 :

public class LocalLogger { 

    private final Logger logger; 

    public LocalLogger(String name) { 
    logger = Logger.getLogger(name); 
    } 

    public LocalLogger(@SuppressWarnings("rawtypes") Class clazz) { 
    logger = Logger.getLogger(clazz); 
    } 

    public void antiqueLoggingMethod(String msg) { 
    logger.info(msg); 
    } 

    // etc. 
}