Я пытаюсь сделать что-то очень простое. У меня есть класс com.mypackage.Logger 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, и каждая запись журнала отформатирован следующим образом:
[СЛЕД] (даты и времени) (протоколирование имя класса) (название нити) (некоторые каротаж заявление)
Проблема заключается в том, что класс ведения журнала, используемый в экземпляре экземпляра Logger, не соответствует правильному, указанному в thisJoinPoint.getSignature().getDeclaringTypeName()
.
Я знаю, что я не делаю что-то правильно относительно статической переменной Logger, поэтому, пожалуйста, помогите мне. Спасибо за ваше время!!!