All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.rx.util.SpringLogInterceptor Maven / Gradle / Ivy

package org.rx.util;

import lombok.SneakyThrows;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.Signature;
import org.rx.beans.Tuple;
import org.rx.core.StringBuilder;

import static java.lang.Boolean.FALSE;
import static java.lang.Boolean.TRUE;
import static org.rx.core.Contract.toJsonString;

public class SpringLogInterceptor {
//    private static final ThreadLocal threadStatic = ThreadLocal.withInitial(() -> FALSE);

    @SneakyThrows
    protected Object onProcess(ProceedingJoinPoint joinPoint, StringBuilder msg) {
        Object p = joinPoint.getArgs();
        switch (joinPoint.getArgs().length) {
            case 0:
                p = "NULL";
                break;
            case 1:
                p = joinPoint.getArgs()[0];
                break;
        }
        Tuple tuple = getProcessFormat();
        msg.appendLine(tuple.left, toJsonString(p));
        Object r = joinPoint.proceed();
        msg.appendLine(tuple.right, toJsonString(r));
        return r;
    }

    protected Object onException(Exception ex, StringBuilder msg) throws Throwable {
        msg.appendLine("Error:\t\t\t%s", ex.getMessage());
        throw ex;
    }

    protected Tuple getProcessFormat() {
        return Tuple.of("Parameters:\t\t%s", "ReturnValue:\t%s");
    }

    public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
        Signature signature = joinPoint.getSignature();
        org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(signature.getDeclaringType());
        if (
//                threadStatic.get() ||
                        !log.isInfoEnabled()) {
            return joinPoint.proceed();
        }

        StringBuilder msg = new StringBuilder();
        try {
//            threadStatic.set(TRUE);
            msg.appendLine("Call %s", signature.getName());
            return onProcess(joinPoint, msg);
        } catch (Exception e) {
            return onException(e, msg);
        } finally {
            log.info(msg.toString());
//            threadStatic.set(FALSE);
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy