2012-02-13 5 views
0

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

Я пытаюсь взять наименее инвазивный подход, используя пружинный 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); 
    } 
} 

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

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

(я мост log4j и Обще-каротаж в SLF4J. Приложение требует регистрации Java Util как его основной реализация.)

+2

А где это Questio n отметьте в своем вопросе? – kan

ответ

Смежные вопросы