# Message Advice - AOP Log

# Message Advice - AOP Log

by jihoon kim

HTML

<style>
.MJXp-math.MJXp-display {
  display:inline !important;
}
</style>
<div id="contents">
# AOP 로그출력 ( Message Advice )
### 참고 : https://doublesprogramming.tistory.com/123

### Source
```java
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import java.util.Arrays;

// Advice : 공통업무를 지원하는 클래스
@Component // 기타 bean
@Aspect // AOP bean : AOP 애노테이션
public class MessageAdvice {

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

	// 매개변수 확인, @Before(대상:호출전)
	@Before("execution(* com.dhi.pds.biz.controller.rest.*Controller.*(..))")
	public void startLog(JoinPoint jp){
		// 핵심업무의 클래스,매서드, 매개변수 로깅 
		logger.info("핵심업무 코드정보  : "+jp.getSignature());
		logger.info("메서드 : "+jp.getSignature().getName());
		logger.info("매개변수:"+ Arrays.toString(jp.getArgs()));
	}

	// method 실행 시간 확인, @Around : 핵심업무 전후에 자동호출, ProceedingJoinPoint
	@Around("execution(* com.dhi.pds.biz.controller.rest.*DoovesController.*(..))")
	public Object timeLog(ProceedingJoinPoint pjp) throws Throwable {
		// 핵심업무 실행 전
		long start = System.currentTimeMillis();
		// 핵심업무 실행
		Object result = pjp.proceed();
		// 핵심업무 실행 후
		long end = System.currentTimeMillis();
		// 핵심업무 실행시간 연산
		logger.info(pjp.getSignature().getName()+"메서드 실행시간:"+(end-start));
		logger.info("==========================================");
		return result;
	}
}
```
</div>

<script type="text/javascript" src="https://rawgit.com/softm/loader/master/loader.js"></script>
<!--
<script src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-MML-AM_CHTML' async></script>
-->
    <script type="text/javascript">
    window.onload = function () {
        loader.js(
            [
               ...