![](https://blog.kakaocdn.net/dn/eB2Ao6/btrnfBSXp4w/4FB7v47uYMlFkOETX9vQFk/img.png)
11. pom.xml : aspectjweaver, aspectjrt
pom.xml에 디펜던시 추가해주세요!
<!-- aop 관련 -->
<!-- aspectjweaver -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- aspectjrt 위에 있기떄문에 원래 없어야함... 하지만 버전까지 완벽하게 똑같아서 있어도 되긴함 -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
version이 다르면 충돌이 날수도 있어서 ${org.aspectj.version}을 사용합니다!
12. com/mvc/upgrade/common/aop/LogAop
![](https://blog.kakaocdn.net/dn/55VFh/btrnjHYQ9XN/bhKYOOTULU0Jgr9d8LX6j0/img.png)
package com.mvc.upgrade.common.aop;
import org.aspectj.lang.JoinPoint;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LogAop {
public void before(JoinPoint join) {
Logger logger = LoggerFactory.getLogger(join.getTarget() + ""); // 대상 객체
logger.info("----------AOP Strat----------");
Object[] args = join.getArgs(); // 대상 파라미터
if(args != null) {
logger.info("method : " + join.getSignature().getName()); // 대상 메서드 정보
for(int i = 0; i < args.length; i++) {
logger.info(i+"번째 : " + args[i]);
}
}
}
public void after(JoinPoint join) {
Logger logger = LoggerFactory.getLogger(join.getTarget() + "");
logger.info("----------AOP End----------");
}
public void afterThrowing(JoinPoint join) {
Logger logger = LoggerFactory.getLogger(join.getTarget() + "");
logger.info("----------AOP Error Log----------");
logger.info("ERROR : " + join.getArgs());
logger.info("ERROR : " + join.toString());
}
}
13. WEB-INF/spring/appServlet/aop-context.xml
![](https://blog.kakaocdn.net/dn/cOLvr3/btrnjhF7cRd/VdMUXrmjhS4wb1ehUmElj1/img.png)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<bean name="logAop" class="com.mvc.upgrade.common.aop.LogAop" />
<aop:config>
<aop:pointcut expression="execution(public * com.mvc.upgrade.model.dao.*Dao*.*(..))" id="daoPoint"/>
<aop:aspect id="logAop" ref="logAop">
<aop:before method="before" pointcut-ref="daoPoint"/>
<aop:after method="after" pointcut-ref="daoPoint"/>
<aop:after-throwing method="afterThrowing" pointcut-ref="daoPoint"/>
</aop:aspect>
</aop:config>
</beans>
14. web.xml : aop-context.xml 추가(DispatcherServlet의 init-param)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://Java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<!-- The definition of the Root Spring COntainer shared by all Servlet and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/application-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Creates the Spring Container shared by all Servelts and Filters -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring/appServlet/servlet-context.xml
/WEB-INF/spring/appServlet/aop-context.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- Processes application requests -->
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- 서버 밖에서 존재. 요청되는거, 응답되는거 받는 역할 -->
<filter>
<filter-name>encodingFilter</filter-name>
<!-- 패키지 : org.spirngframework.web.filter -->
<!-- 클래스 : CharacterEncoding -->
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>logFilter</filter-name>
<filter-class>com.mvc.upgrade.common.filter.LogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>logFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
![](https://blog.kakaocdn.net/dn/B1iet/btrnd5mg7Z1/eQxzRDXkVriUXyRwPs4bg0/img.png)
15. src/main/resources/log4j.xml (logger 추가 및 log level 변경)
<!DOCTYPE log4j:configuration SYSTEM "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
알수없는 오류가 있는데 2번째 줄을 해당 코드로 바꿔주세요!(신기하게 바꾸면 에러가 사라지더라구요)
<!-- Root Logger -->
<root>
<priority value="trace" />
<appender-ref ref="console" />
</root>
![](https://blog.kakaocdn.net/dn/bj7zAu/btrnjiSwWA5/4xeumklzXhfVtouNkLjsi0/img.png)
log4j log level
- Level.FATAL : 치명적인 에러
- Level.ERROR : 에러
- Level.WARN : 경고
- Level.INFO : 정보
- Level.DEBUG : 디버깅 정보
- Level.TRACE : DEBUG + @(상세한 정보)
Legacy프로젝트를 실행시키면 console창에 검정색 글씨로 뜨는 것들이 있는데 그것을 출력하는 것들이 <!-- 3rdparty Loggers --> 부분에 해당하는 core & beans & context & web들입니다.
검정색 글씨는 log4j가 하는것이고 에러가 발생했을때의 빨간색 글씨는 java가 해주는것입니다!
![](https://blog.kakaocdn.net/dn/n7Rzr/btrnoBXEz3l/2I72ZngfAsVeD2TxgxVjaK/img.png)
프로젝트를 실행시키면 이런 내용이 console에 찍힙니다.
파란색 영역은 LogAop파일에서 찍어준 내용이고
빨간색 영역은 log4j에서 TRACE로 찍었기에 DEBUG뿐만 아니라 모든 내용이 다 나오게 됩니다.
'Java 관련 > Spring Legecy' 카테고리의 다른 글
[Spring] Interceptor(인터셉터) (0) | 2022.04.06 |
---|---|
[Spring] Login / Regist(로그인 / 회원가입) (0) | 2022.04.05 |
[Spring] filter(javax.servlet.Filter) (0) | 2022.04.03 |
[Spring] 스프링으로 게시판만들기 (0) | 2022.04.02 |
[Spring] request, response (0) | 2022.04.01 |