Spring-AOP и SLF4J - PullRequest
       34

Spring-AOP и SLF4J

0 голосов
/ 13 февраля 2012

Я использую Spring-AOP, чтобы рекомендовать управляемый bean-компонент Spring, расширяющий абстрактный класс, который реализует 3 интерфейса.В иерархии наследования есть и другие бины с пружинным управлением.

Я пытаюсь использовать наименее инвазивный подход, используя spring-LTW:

<context:component-scan base-package="com.foo.aop"/>
<!-- ... -->
<aop:aspectj-autoproxy proxy-target-class="true"/>
<context:load-time-weaver/>

Использование кухонной раковиныподход, чтобы попытаться заставить ведение журнала происходить:

@Aspect
@Component
public class ForStackOverflow {

    private final Log commons = LogFactory.getLog(ForStackOverflow.class);
    private final org.apache.log4j.Logger log4j = org.apache.log4j.Logger.getLogger(ForStackOverflow.class);
    private final Logger jul = Logger.getLogger(ForStackOverflow.class.getSimpleName());
    private final org.slf4j.Logger slf4j = org.slf4j.LoggerFactory.getLogger(ForStackOverflow.class);

    @Pointcut(value="within(com.foo.aop.AbstractClass+) " +
                    "&& execution(* advisedMethod(com.foo.SomeType)) " +
                    "&& args(someType)")
    private void adviseMe(SomeType someType){}

    @After(value="adviseMe(com.foo.SomeType) && args(someType)", argNames = "someType")
    public void itWorked(SomeType someType) {
        String msg = "DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG DEBUG";
        logIt(msg);               
        IsNotNull(someType, "someType");
        String message = "SomeType [ " + someType + "] loaded.";
        status(message);
        logIt(msg);
    }

    void status(String message) {        
        logIt(message);
    }

    private void logIt(String msg){
        System.out.println("STDOUT: " + msg);
        System.err.println("STDERR: " + msg);
        commons.warn("COMMONS: " + msg);
        log4j.warn("LOG4J: " + msg );
        jul.warning("JUL: " + msg);
        slf4j.warn("SLF4J: " + msg );
    }
}

У меня есть доказательства того, что мой метод рекомендуется, потому что я могу бросить оттуда и увидеть, как трассировка стека появляется в соответствующем месте.

Но ведение журнала неуловимо.

(я соединяю log4j и com-logging с slf4j. Приложению требуется регистрация java util в качестве базовой реализации.)

1 Ответ

0 голосов
/ 16 октября 2012

Скорее всего, вы забыли добавить параметр jvm -javagent или вы не включили файл META-INF \ aop.xml в путь к классу приложения

, подробности см. Ниже в ответе

Весеннее время загрузки не обнаруживает класс, помеченный @ configurable

...