在控制器

时间:2017-11-09 13:42:56

标签: java spring

问题在于,当我想从某些控制器方法打印一些日志时,不会调用带有LogInit注释的带注释的方法,但是当我使用相同的注释注释其他一些服务方法时,会调用around方法。我在这个问题上遇到了一段时间,我需要让它发挥作用。

我有以下方面:

 package com.db.mybank.backend.aop;

import com.db.mybank.backend.model.presentation.CustomerDataVO;


//import org.apache.log4j.LogManager;

import org.apache.log4j.MDC;
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.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

@Aspect
@Component
public class LogInitAspect {

private static final Logger LOGGER = LoggerFactory.getLogger("SPLUNK");
private static final String METRIC_SPLITTER = ";";

/**
 * Creates AOP pointcut and advice
 * @param joinPoint  (the executing method which has been annotated with @LogInit )
 * @return
 * @throws Throwable
 */
@Around("@annotation(com.db.mybank.backend.aop.LogInit)")
public void logInitSplunk(ProceedingJoinPoint joinPoint)  {
    initMDC();
    CustomerDataVO proceed = null;
    try {
        proceed = (CustomerDataVO) joinPoint.proceed();
    } catch (Throwable throwable) {
        throwable.printStackTrace();
    }
    LOGGER.info(getFormattedLogLine());
    return;
}

private String getFormattedLogLine() {
    return MDC.get(MDCEnum.TIMESTAMP.getValue())+METRIC_SPLITTER+MDC.get(MDCEnum.CCCARD.getValue())+METRIC_SPLITTER
    +MDC.get(MDCEnum.SESSIONID.getValue())+METRIC_SPLITTER+MDC.get(MDCEnum.TIMESTAMP_REQUEST.getValue())+METRIC_SPLITTER
    +MDC.get(MDCEnum.TIMESTAMP_RESPONSE.getValue())+METRIC_SPLITTER+MDC.get(MDCEnum.SERVICE_ID.getValue())+METRIC_SPLITTER
    +MDC.get(MDCEnum.SERVICE_URI.getValue())+METRIC_SPLITTER+MDC.get(MDCEnum.RESULT.getValue())+METRIC_SPLITTER
    +MDC.get(MDCEnum.DEVICE_INFO.getValue())+METRIC_SPLITTER+MDC.get(MDCEnum.LOGIN_TIMESTAMP.getValue())+METRIC_SPLITTER
    +MDC.get(MDCEnum.RESULT_LOGIN.getValue())+METRIC_SPLITTER+MDC.get(MDCEnum.LOGOUT_TIMESTAMP.getValue())+METRIC_SPLITTER
    +MDC.get(MDCEnum.IP_ADDRESS_CLIENT.getValue())+METRIC_SPLITTER+MDC.get(MDCEnum.USER_AGENT_CLIENT.getValue())+METRIC_SPLITTER
    +MDC.get(MDCEnum.TIMESTAMP_AUTHORIZATION.getValue())+METRIC_SPLITTER+MDC.get(MDCEnum.TRANSACTION_SERVICE_NAME.getValue())+METRIC_SPLITTER
    +MDC.get(MDCEnum.VALUE_AND_CURRENCY.getValue())+METRIC_SPLITTER+MDC.get(MDCEnum.TRANSACTION_ID.getValue())+METRIC_SPLITTER
    +MDC.get(MDCEnum.TIMESTAMP_TRANSACTION_SUBMIT_TO_BACKEND.getValue())+METRIC_SPLITTER+MDC.get(MDCEnum.NDG.getValue())+METRIC_SPLITTER;
}

private void initMDC(){

    MDC.put(MDCEnum.TIMESTAMP.getValue(),"N/A");
    MDC.put(MDCEnum.CCCARD.getValue(),"N/A");
    MDC.put(MDCEnum.SESSIONID.getValue(),"N/A");
    MDC.put(MDCEnum.TIMESTAMP_REQUEST.getValue(),"N/A");
    MDC.put(MDCEnum.TIMESTAMP_RESPONSE.getValue(),"N/A");
    MDC.put(MDCEnum.SERVICE_ID.getValue(),"N/A");
    MDC.put(MDCEnum.SERVICE_URI.getValue(),"N/A");
    MDC.put(MDCEnum.RESULT.getValue(),"N/A");
    MDC.put(MDCEnum.DEVICE_INFO.getValue(),"N/A");
    MDC.put(MDCEnum.LOGIN_TIMESTAMP.getValue(),"N/A");
    MDC.put(MDCEnum.RESULT_LOGIN.getValue(),"N/A");
    MDC.put(MDCEnum.LOGOUT_TIMESTAMP.getValue(),"N/A");
    MDC.put(MDCEnum.IP_ADDRESS_CLIENT.getValue(),"N/A");
    MDC.put(MDCEnum.USER_AGENT_CLIENT.getValue(),"N/A");
    MDC.put(MDCEnum.TIMESTAMP_AUTHORIZATION.getValue(),"N/A");
    MDC.put(MDCEnum.TRANSACTION_SERVICE_NAME.getValue(),"N/A");
    MDC.put(MDCEnum.VALUE_AND_CURRENCY.getValue(),"N/A");
    MDC.put(MDCEnum.TRANSACTION_ID.getValue(),"N/A");
    MDC.put(MDCEnum.TIMESTAMP_TRANSACTION_SUBMIT_TO_BACKEND.getValue(),"N/A");
    MDC.put(MDCEnum.NDG.getValue(),"N/A");

}
}

我有以下控制器方法无效。

@RequestMapping(value = "/prelogin", method = RequestMethod.POST)
@ResponseBody
@LogInit
public AuthDataVO preLogin(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) {

0 个答案:

没有答案