복붙노트

[SPRING] 스프링 관리 웹 애플리케이션의 Log4J Appender에서 Spring 관리 Bean을 검색하는 데 사용할 수있는 옵션은 무엇입니까?

SPRING

스프링 관리 웹 애플리케이션의 Log4J Appender에서 Spring 관리 Bean을 검색하는 데 사용할 수있는 옵션은 무엇입니까?

현재 빌드 리드는 이론상으로 훌륭한 아이디어를 가지고 있습니다. 스프링 관리 빈을 사용하는 사용자 정의 Log4J appender를 생성하고 표준 로그 파일 이외의 다른 여러 소스에 오류를 기록하는 데 사용합니다. 그러나, 애플리케이션 컨텍스트 (코드가 잠시 후)로 시작될 때 싱글 톤을 생성하는 것 외에는 Log4J 애 퍼처에서 Spring 관리 빈을 검색하는 다른 옵션을 생각할 수 없다.

public class SpringSingleton implements ApplicationContextAware {
    private static ApplicationContext context;
    public SpringSingleton() {
        super();
    }
    public static ApplicationContext getContext() {
        return SpringSingleton.context;
    }
    public void setApplicationContext(ApplicationContext context) {
        if(SpringSingleton.context != null) {
            throw new IllegalStateException("Context is already set!");
        }
        SpringSingleton.context = context;
    }
}

이상적으로, 이러한 속성은 의존성 삽입을 통해 Spring의 Bean처럼 설정 될 수있다. 초기화 된 얼마나 많은 애펜더라도 아무런 변화가 없다. 어떤 아이디어?

해결법

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

    1.당신은 log4j가 Spring 전에 초기화되어야하기 때문에 boostrap 문제가있을 것이다. 사용자 정의 구성이나 Log4j의 표준 초기화 프로그램을 사용하든 관계없이 응용 프로그램 컨텍스트가 시작되어야합니다.

    당신은 log4j가 Spring 전에 초기화되어야하기 때문에 boostrap 문제가있을 것이다. 사용자 정의 구성이나 Log4j의 표준 초기화 프로그램을 사용하든 관계없이 응용 프로그램 컨텍스트가 시작되어야합니다.

    이제는 이론적으로 사용자 정의 appenders를 "느슨하게"초기화 할 수 있습니다. 위에서 제안한 접근 방식을 사용하거나 appender 자체를 "semi"singleton으로 만듭니다. 예를 들어 appender 클래스에는 afterPropertiesSet () 메서드로 채워지는 정적 인스턴스 필드가 있습니다. ; 그런 식으로 appender 자체를 Spring 내에서 bean으로 생성 할 수는 있지만 다소 엉망이고 일관성이없는 것처럼 보인다.

    또 다른 방법은 Spring 컨텍스트가 초기화 된 후에 Log4j를 동적으로 재구성하는 것입니다. 예 : ContextStartedEvent를 캐치하기위한 청취자를 작성해, Appender 형의 모든 bean를 문맥으로부터 취득 해, 그것을 Log4j 구성에 추가합니다. 이것은 또한 당신이 appender를 bean으로 만들 수는 있지만 singleton mess을 다소 피할 수있게합니다.

  2. ==============================

    2.늦었지만, 이것이 다른 누군가를 도울 수 있기를 바랍니다. 다음 링크에서 제공 한 답변에서이 문제에 대한 해결책을 문서화했습니다.

    늦었지만, 이것이 다른 누군가를 도울 수 있기를 바랍니다. 다음 링크에서 제공 한 답변에서이 문제에 대한 해결책을 문서화했습니다.

    log4j - Appender 클래스를 로깅하여 Spring 빈에 접근하기

  3. from https://stackoverflow.com/questions/1730634/what-are-the-available-options-to-retrieve-spring-managed-beans-in-a-log4j-appen by cc-by-sa and MIT license