весенний аспектj pointcut при ведении журнала с slf4j - PullRequest
4 голосов
/ 20 марта 2012

работаю с пружиной 3.0.6.Мое приложение имеет много мест, где добавлена ​​регистрация (slf4j).Скажем, мне нужно добавить какую-то функцию для каждой серьезной ошибки - для меня будет лучше перехватывать каждый вызов уровень регистрации ошибок и выполнять после этого работу - отправлять почту для поддержки с сообщением об исключении или что-то в этом родеэто - чем вручную добавить код ко всем местам в приложении.

Я создал следующий класс:

@Aspect
public class LoggingWrapper {

    @Pointcut("execution (* org.slf4j.Logger.error(..))")
    public void logError() {
    }

    @AfterReturning("logError()")
    public void afterError() {
        //System.out.println("LOGERROR ASPECT AFTER");
        //send email...
    }
}

В весенней конфигурации:

<aop:aspectj-autoproxy />
<bean id="loggingWrapper" class="com.app.services.LoggingWrapper"/>

Аспект работает хорошо с моими классами, но для org.slf4j.Logger - ничего не произошло

Ответы [ 2 ]

8 голосов
/ 20 марта 2012

@ crudo6, это не будет работать с поддержкой Spring @AspectJ с использованием прокси - причина в том, как Spring обрабатывает аннотацию @AspectJ, например, для создания прокси. если вы @Around советуете для @PointCut("execution (for your class)"), тогда Spring создаст прокси для всех bean-компонентов в Spring Context с типами, которые соответствуют классу в pointcut.

Теперь, поскольку классы slf4j не являются частью контекста Spring, для них не будет создан прокси, и ваши аспекты не вступят в силу.

Чтобы заставить их работать, вы можете попробовать ткачество времени загрузки или ткачество времени компиляции и использовать '@Pointcut ("call (* org.slf4j.Logger.error (..))")' вместо выполнения, это Таким образом, любые звонки на SLF4J могут быть перехвачены вашим советом. Для @Pointcut выполнения потребуется переплетение библиотек slf4j, что может оказаться невозможным.

0 голосов
/ 20 марта 2012

Синхронная отправка почты в случае ошибки - плохая практика. Вы можете отправить слишком много электронных писем, которые могут хранить потоки в течение более длительного времени и влиять на производительность и масштабируемость приложения. Наилучшим подходом является использование инструмента мониторинга журналов, такого как Splunk.

...