2015-09-20 2 views
-2
  1. hi Все, я должен зарегистрировать весь запрос, ответ, исключение, Ошибки для моих услуг Spring. я искал о перехватчиков, фильтры, фильтры, лесозаготовительных Spring перехватчиков: HandlerInterceptorAdapter регистратор фильтров: AbstractRequestLoggingFilter.java и его подкомитетов классов (http://www.javawebdevelop.com/1704067/), CommonsRequestLoggingFilter.java фильтры: LoggerFilter.Запрос на регистрацию и ответ для службы весны mvc

    может любое тело его отличие, и лучший подход, чтобы сделать так, я спутать или мне нужно выяснить библиотеку третьей стороны, чтобы сделать это ? ..

ответ

0

Log4j является Java на основе утилита для ведения журнала с простой интеграцией с Spring MVC. Log4j поставляется с различными уровнями ведения журнала, чтобы обеспечить соответствующую регистрацию в соответствии с средой разработки.

Log4j 2 является преемником log4j и имеет лучшую производительность по сравнению с его предшественником.

Пожалуйста, обратитесь к следующей ссылке для интеграции Spring MVC + Log4j
http://www.codejava.net/frameworks/spring/how-to-use-log4j-in-spring-mvc

Edit: Как уже говорилось в комментарии, PFB код для регистрации как запрос и ответ.

@Aspect 
@Component 
public class ResponseLoggerAspect { 

private static final Logger logger = Logger.getLogger("requestResponseLogger"); 
ExclusionStrategy excludeJsonAnnotation = new JsonIgnoreAnnotationExclusionStrategy(); 
Gson gson = new GsonBuilder().setExclusionStrategies(excludeJsonAnnotation).create(); 

@Pointcut("within(@org.springframework.stereotype.Controller *)") 
public void controller() {} 

@Pointcut("execution(* *(..))") 
public void method() {} 

@Pointcut("execution(@com.company.annotation.AddLog * *(..))") 
public void Loggable() {} 

//This will be caught for only those controller method where @AddLog annotation is written 
@Before("Loggable()") 
public void printRequestLog(JoinPoint joinPoint) { 
    try { 
     Object[] argsList = joinPoint.getArgs(); 
     String str = "["; 
     for(Object arg : argsList) { 
      if(arg instanceof Object[]) { 
       str += Arrays.toString((Object[])arg) + ", "; 
      } else { 
       str += String.valueOf(arg) + ", "; 
      } 
     } 
     str += "]"; 
     logger.info("Request args for " + joinPoint.getSignature().getName() + " are : " + str); 
    } catch(Exception ex) { 
     logger.info("Unable to log request args", ex); 
    } 
} 

//This will be called for all controller methods after returning 
@AfterReturning(pointcut = "controller() && method()", returning="result") 
public void afterReturning(JoinPoint joinPoint , Object result) { 
    long start = System.nanoTime(); 
    try { 
     logger.info("Response sent by " + joinPoint.getSignature().getName() + " are : " + gson.toJson(result)); 
    } catch(Exception ex) { 
     logger.error("Returned result cant be converted in JSON " , ex); 
    } 
    long end = System.nanoTime(); 
    logger.info("elapsed time : " + (end - start)); 
} 

}

+0

нет, я Ван войти как запрос и ответ на отдых .. все равно спасибо .. – ramki

+0

Пожалуйста, смотрите редактирование выше. Надеюсь, я ответил на ваш запрос. – manu

0

Я использовал АОП нечто подобное в одном проекте. Я должен был написать класс, как это:!

@Component 
@Aspect 
public class RequestMonitor { 

    private static final Logger logger = LoggerFactory.getLogger(RequestMonitor.class); 

    @Around("@annotation(org.example.ToBeLogged)") 
    public Object wrap(ProceedingJoinPoint pjp) throws Throwable { 

     logger.info("Before controller method " + pjp.getSignature().getName() + ". Thread " + Thread.currentThread().getName()); 
     Object retVal = pjp.proceed(); 
     logger.info("Controller method " + pjp.getSignature().getName() + " execution successful"); 

     return retVal; 
    } 
} 
Смежные вопросы