쓸만한 JSP 홈페이지 만들기

공통클래스 - MethodLogAop

엉으니 2019. 4. 30. 09:36

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 끝

 

 

반응형