Я пытаюсь сделать что-то очень простое.У меня есть класс логгера com.mypackage.Logger, оператор экземпляра которого я хотел бы «вставить» в каждый отдельный класс следующим образом: private static Logger LOG = new Logger(Class.class)
.Затем я хотел бы регистрировать каждую запись и выход для каждой отдельной функции в моем проекте.Вот мой аспект:
public aspect LoggingAspect pertypewithin(*) {
private static Logger LOG;
pointcut classes(): within(com.mypackage..*) && !within(com.mypackage.Logger) && !within(com.mypackage.LoggingAspect);
pointcut functions(): classes() && (execution(* *(..)) || execution(new(..)));
before(): staticinitialization(*) && classes() {
LOG = new Logger(thisJoinPointStaticPart.getSignature().getDeclaringType());
}
before() : functions() {
LOG.trace("ENTER " + thisJoinPoint.getSignature().toLongString());
}
after() returning(@SuppressWarnings("unused") Object ret) : functions() {
LOG.trace("EXIT " + thisJoinPoint.getSignature().toLongString());
}
Почти все работает правильно.Я получаю правильный вход и существующие отчеты журнала точно так, как ожидалось.Проблема в том, что класс журналирования, связанный с каждой записью журнала, неверен.Я использую log4j, и каждая запись в журнале форматируется следующим образом:
[TRACE] (отметка даты и времени) (имя класса ведения журнала) (имя потока) (некоторые инструкции ведения журнала)
Проблема в том, что класс ведения журнала, используемый при создании экземпляра Logger, не соответствует правильному классу, указанному thisJoinPoint.getSignature().getDeclaringTypeName()
.
Я знаю, что не правильно что-то делаю в отношении статическогоПеременная логгер, поэтому, пожалуйста, помогите мне.спасибо за ваше время !!!