Skip to content
Snippets Groups Projects
Commit 71c9bfa0 authored by OZGCloud's avatar OZGCloud
Browse files

OZG-1518 OZG-1930 remove aspect logging from goofy

parent ab816357
No related branches found
No related tags found
No related merge requests found
...@@ -85,10 +85,6 @@ ...@@ -85,10 +85,6 @@
<groupId>de.itvsh.ozg.pluto</groupId> <groupId>de.itvsh.ozg.pluto</groupId>
<artifactId>pluto-interface</artifactId> <artifactId>pluto-interface</artifactId>
</dependency> </dependency>
<dependency>
<groupId>de.itvsh.kop.common</groupId>
<artifactId>kop-common-test</artifactId>
</dependency>
<!-- tools --> <!-- tools -->
<dependency> <dependency>
......
...@@ -6,6 +6,7 @@ import org.springframework.boot.SpringApplication; ...@@ -6,6 +6,7 @@ import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy; import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.web.filter.ForwardedHeaderFilter; import org.springframework.web.filter.ForwardedHeaderFilter;
...@@ -13,6 +14,7 @@ import org.springframework.web.filter.ForwardedHeaderFilter; ...@@ -13,6 +14,7 @@ import org.springframework.web.filter.ForwardedHeaderFilter;
@SpringBootApplication @SpringBootApplication
@EnableAsync @EnableAsync
@EnableAspectJAutoProxy(proxyTargetClass = true) @EnableAspectJAutoProxy(proxyTargetClass = true)
@ComponentScan({ "de.itvsh.*" })
public class GoofyServerApplication { public class GoofyServerApplication {
public static void main(String[] args) { public static void main(String[] args) {
......
package de.itvsh.goofy.common.logging;
import java.util.Collection;
import java.util.Objects;
import java.util.StringJoiner;
import org.apache.commons.lang3.ArrayUtils;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import de.itvsh.goofy.common.datatypes.StringBasedValue;
import lombok.AccessLevel;
import lombok.NoArgsConstructor;
import lombok.extern.log4j.Log4j2;
@Log4j2
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class AspectLoggingUtils {
private static final String LOGGING_TEMPLATE = "%s: %s";
private static final String LOGGING_CALL_TEMPLATE = "%s(%s)";
private static final String LOGGING_RESULT_TEMPLATE = "%s => %s";
static void log(final JoinPoint joinPoint) {
try {
MethodSignature sig = (MethodSignature) joinPoint.getSignature();
var log = getLogger(joinPoint);
if (log.isDebugEnabled()) {
log.debug(String.format(LOGGING_CALL_TEMPLATE, sig.getName(), formatDebuggingParameter(joinPoint)));
} else {
log.info(String.format(LOGGING_CALL_TEMPLATE, sig.getName(), formatInfoParameters(joinPoint)));
}
} catch (RuntimeException e) {
LOG.error("Error on generating log output for " + joinPoint, e);
}
}
static void logException(JoinPoint joinPoint, Exception exception) {
try {
var log = getLogger(joinPoint);
if (log.isWarnEnabled()) {
log.warn(String.format(LOGGING_TEMPLATE, exception.getClass().getSimpleName(), exception.getMessage()));
}
if (log.isDebugEnabled()) {
log.debug(exception.getMessage(), exception);
}
} catch (RuntimeException e) {
LOG.error("Error on generating log on exception.", e);
LOG.error("Original exception log", exception);
}
}
static void logReturnValue(JoinPoint joinPoint, Object returnValue) {
try {
MethodSignature sig = (MethodSignature) joinPoint.getSignature();
var log = getLogger(joinPoint);
if (log.isInfoEnabled()) {
log.info(String.format(LOGGING_RESULT_TEMPLATE, sig.getName(),
sig.getReturnType() == Void.TYPE ? "<Void>" : formatInfoParameter(returnValue)));
}
} catch (RuntimeException e) {
LOG.error("Error on generating log for returnValue.", e);
}
}
private static Logger getLogger(final JoinPoint joinPoint) {
return LoggerFactory.getLogger(joinPoint.getSignature().getDeclaringType());
}
private static String formatInfoParameters(final JoinPoint joinPoint) {
String[] paramNames = getSignature(joinPoint).getParameterNames();
Object[] paramValues = joinPoint.getArgs();
var stringJoiner = new StringJoiner(", ");
for (int n = 0; n < paramValues.length; n++) {
if (Objects.nonNull(paramNames)) {
stringJoiner.add(String.format(LOGGING_TEMPLATE, paramNames[n], formatInfoParameter(paramValues[n])));
} else {
stringJoiner.add(formatInfoParameter(paramValues[n]));
}
}
return stringJoiner.toString();
}
private static String formatInfoParameter(Object value) {
if (Objects.nonNull(value) && printValueOnInfoLevel(value.getClass())) {
return formatParameter(value);
} else if (Objects.nonNull(value)) {
var sb = new StringBuilder();
sb.append("<").append(value.getClass().getSimpleName());
if (value.getClass().isArray()) {
sb.deleteCharAt(sb.length() - 1);
sb.append(ArrayUtils.getLength(value)).append("]");
}
sb.append(">");
return sb.toString();
} else {
return "-null-";
}
}
private static boolean printValueOnInfoLevel(Class<?> paramClass) {
return paramClass.isPrimitive() || //
StringBasedValue.class.isAssignableFrom(paramClass) || //
String.class.isAssignableFrom(paramClass) || //
Number.class.isAssignableFrom(paramClass);
}
private static String formatDebuggingParameter(final JoinPoint joinPoint) {
String[] paramNames = getSignature(joinPoint).getParameterNames();
Object[] paramValues = joinPoint.getArgs();
var sb = new StringBuilder();
for (int n = 0; n < paramValues.length; n++) {
if (n > 0) {
sb.append(", ");
}
if (paramNames != null) {
sb.append(paramNames[n]).append(": ");
}
sb.append(formatParameter(paramValues[n]));
}
return sb.toString();
}
private static String formatParameter(final Object param) {
if (param == null) {
return "NULL";
}
if (Collection.class.isAssignableFrom(param.getClass())) {
return "Collection with size " + ((Collection<?>) param).size();
} else {
return param.toString();
}
}
private static MethodSignature getSignature(final JoinPoint joinPoint) {
return (MethodSignature) joinPoint.getSignature();
}
}
\ No newline at end of file
package de.itvsh.goofy.common.logging;
import org.aspectj.lang.annotation.Pointcut;
public class AspectPointcuts {
@Pointcut("execution(public * *(..))")
void anyPublicMethods() {
// aspect pointcut - no implementation needed
}
@Pointcut("within(de.itvsh..*)")
void anythingInKOP() {
// aspect pointcut - no implementation needed
}
@Pointcut("anyPublicMethods() && anythingInKOP()")
void anyPublicMethodInKOP() {
// aspect pointcut - no implementation needed
}
@Pointcut("anyPublicMethodInKOP() && @target(org.springframework.stereotype.Service)")
void anyPublicServiceMethod() {
// aspect pointcut - no implementation needed
}
}
package de.itvsh.goofy.common.logging;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.AfterThrowing;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class KopLoggingAspect extends AspectPointcuts {
@Before("anyPublicServiceMethod()")
public void onServiceMethod(JoinPoint joinPoint) {
AspectLoggingUtils.log(joinPoint);
}
@AfterThrowing(pointcut = "anyPublicServiceMethod()", throwing = "ex")
public void afterExceptionInServiceMethod(JoinPoint joinPoint, Exception ex) {
AspectLoggingUtils.logException(joinPoint, ex);
}
@AfterReturning(pointcut = "anyPublicServiceMethod()", returning = "returnValue")
public void afterServiceMethod(JoinPoint joinPoint, Object returnValue) {
AspectLoggingUtils.logReturnValue(joinPoint, returnValue);
}
}
...@@ -25,7 +25,6 @@ ...@@ -25,7 +25,6 @@
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<pluto.version>0.18.0-SNAPSHOT</pluto.version> <pluto.version>0.18.0-SNAPSHOT</pluto.version>
<kop-common-test.version>0.0.1-SNAPSHOT</kop-common-test.version>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
...@@ -35,11 +34,6 @@ ...@@ -35,11 +34,6 @@
<artifactId>pluto-interface</artifactId> <artifactId>pluto-interface</artifactId>
<version>${pluto.version}</version> <version>${pluto.version}</version>
</dependency> </dependency>
<dependency>
<groupId>de.itvsh.kop.common</groupId>
<artifactId>kop-common-test</artifactId>
<version>${kop-common-test.version}</version>
</dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment