aoplogger.xml에서 methodLogAspect빈으로 등록했고
aspect, 프록시에 methodLogAspect빈을 주입했던 MethodLogAop 클래스를 작성한다.
aop-context.xml에서 method로 정의했던
logging, beforeMethod, afterMethod, afterThrowing 총 4개의 함수를 만들것이다.
1. 로거 설정
private final Logger logger = LoggerFactory.getLogger("Aspect Log");
- Logger들은 이름 기반으로 생성된다.
- LoggerFactory.getLogger("NAME")로 Logger를 호출하면 딱하나 인스턴스를 반환한다.
- 여러번 호출해도 같은객체이다.
- String대신 클래스정보를 넘겨주면 packageName + ClassName으로 클래스 이름을 사용하게 된다.
참고 : https://sonegy.wordpress.com/category/logging/
2. logging 메소드
public Object logging(ProceedingJoinPoint joinPoint) throws Throwable {
StopWatch stopWatch = new StopWatch();
try {
stopWatch.start();
Object retValue = joinPoint.proceed();
return retValue;
} catch(Throwable e) {
throw e;
} finally {
stopWatch.stop();
TimeVO vo = new TimeVO();
Method[] methods = joinPoint.getTarget().getClass().getMethods();
String actionName = joinPoint.getTarget().getClass().toString();
for ( Method method : methods) {
if ( method.getName().equals(joinPoint.getSignature().getName())) {
if (method.getAnnotation(RequestMapping.class) != null) {
vo.setActionNm(actionName);
vo.setProcTime(Long.toString(stopWatch.getTotalTimeMillis()));
}
}
}
if (logger.isDebugEnabled()) {
logger.debug("Process Time : " + Long.toString(stopWatch.getTotalTimeMillis()) + " ms");
}
}
}
- 파라미터 ProceedingJoinPoint
- try/ catch구문 사용
- try에서 stopWatch.start()
- joinPoint.proceed()를 Object형 변수에 담아 리턴했다. (어디서 쓰일진 모르겠다)
- catch에서 예외 throw했음
- finally에서 stopWatch.stop();
- 메소드들과 클래스 이름을 각각 Method배열, String형 변수에 담아 저장했다.
- method는 for루프 돌면서 클래스 이름과 실행시간을 특정 vo에 저장하려고 한다.
- TimeVO를 여기서 만든다.
- TimeVO에는 ActionName(클래스이름)과 ProcTime(실행시간)을 필드로 넣고 setter, getter 만들었다.
(하지만 이것 역시 어디서 쓰일지 모르겠다, 추후 업데이트 예정)
- Process Time을 debug모드일때 출력 ( Long.toString(stopWatch.getTotalTimeMillis()); )
3. beforeMethod, afterMethod (메소드 시작, 메소드 종료)
public void beforeMethod(JoinPoint joinPoint) {
String methodName = joinPoint.getSignature().toShortString();
if (logger.isDebugEnabled()) {
logger.info(methodName + " [START]");
}
}
public void afterMethod(StaticPart staticPart, Object result)
{
String methodName = staticPart.getSignature().toShortString();
if (logger.isDebugEnabled()) {
logger.info(methodName + "[\n" + result + "\n] [END]");
}
}
- debug모드일 때만 출력한다.
- beforeMethod는 JoinPoint가 파라미터이다.
- afterMethod에서는 methodName과 result를 출력한다.
4. afterThrowing
public void afterThrowing(Exception ex) {
logger.debug(ex.toString());
}
- debug모드일 때 예외가 발생하면 출력한다.
MethodLogAop.java 끝
'쓸만한 JSP 홈페이지 만들기' 카테고리의 다른 글
톰캣오류 - At least one JAR was scanned for TLDs yet contained no TLDs. (0) | 2019.05.01 |
---|---|
web.xml설정 - ExcludeServlet (0) | 2019.05.01 |
Spring 설정xml - aop-context.xml (0) | 2019.04.25 |
공통클래스 - AbstractVO (0) | 2019.04.18 |
공통클래스 - AbstractController (0) | 2019.04.17 |