I tried to create Pointcut & advice for annotation Scheduled and public methods in com.example package, but it doesnt work. When I tryed to call services in com.example, advice doesnt work. Also for annotation @Scheduled it doesnt work. I try to read documentation, it seems that it should work, but in reality it doesnt work. Can please someone give me a point, how to solve this issue.
package com.dhl.common.logging;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.MDC;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import java.net.InetAddress;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.UUID;
@Aspect
@Configuration
@Order(Ordered.HIGHEST_PRECEDENCE)
public class LoggingAspect {
private static final String DATE_FORMATTER= "MMM dd, yyyy'T'HH:mm:ss.SSS";
public static final String LOG_LEVEL_KEY = "LOG_LEVEL";
public static final String APP_NAME_KEY = "APP_NAME";
public static final String LOGGER_CLASS_NAME_KEY = "LOGGER_CLASS_NAME";
public static final String SERVER_NAME_KEY = "SERVER_NAME";
public static final String FORMATED_TIME_KEY = "FORMATED_TIME";
public static final String ENVIROMENT_KEY = "ENVIROMENT";
public static final String DISTRIBUTE_TRACE_ID_KEY = "DISTRIBUTE_TRACE_ID";
@Pointcut("@annotation(org.springframework.scheduling.annotation.Scheduled)")
private void scheduled() {}
@Pointcut("within(com.example..*)")
private void service() {}
@Around("scheduled() && service()")
public Object connectionAdvice(ProceedingJoinPoint joinPoint) throws Throwable {
MDC.put(LOG_LEVEL_KEY, "INFO");
MDC.put(APP_NAME_KEY, "CRDB");
MDC.put(LOGGER_CLASS_NAME_KEY, joinPoint.getSourceLocation().getWithinType().toString());
String serverName = InetAddress.getLocalHost().getHostName();
MDC.put(SERVER_NAME_KEY, serverName);
MDC.put(FORMATED_TIME_KEY, getFormatedTime());
if(serverName != null) {
if(serverName.toUpperCase().contains("LOCALHOST")) {
MDC.put(ENVIROMENT_KEY,"LOCALHOST");
} else if(serverName.toUpperCase().contains("TEST")) {
MDC.put(ENVIROMENT_KEY,"TEST");
} else if(serverName.toUpperCase().contains("UAT")) {
MDC.put(ENVIROMENT_KEY,"UAT");
} else {
MDC.put(ENVIROMENT_KEY,"PRODUCTION");
}
}
MDC.put(DISTRIBUTE_TRACE_ID_KEY, UUID.randomUUID().toString());
try {
return joinPoint.proceed();
}
finally {
// Might as well clear all the MDC, not just the "myId"
MDC.clear();
}
}
private String getFormatedTime() {
LocalDateTime localDateTime = LocalDateTime.now(); //get current date time
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_FORMATTER);
String formatDateTime = localDateTime.format(formatter);
return formatDateTime;
}
}