-
[project config] Spring 유닛 설정개발/개발환경구축 2022. 12. 23. 18:37
본 글은 Spring boot 이 아닌 Spring mvc 를 기준으로 하고 있습니다.
1.Spring AOP
①pom.xml 에 maven 의존 추가
<dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId><!--AOP--> <version>1.8.14</version> </dependency>
②configuration 설정 (2중 1택)
1)java configuration
@Configuration @EnableWebMvc @EnableAspectJAutoProxy(proxyTargetClass = true) public class MvcConfiguration{ @Bean public AspectHouse aspectHouse(){ return new AspectHouse(); } }
2)xml configuration
<beans xsi:schemaLocation="... + http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd" xmlns:aop="http://www.springframework.org/schema/aop"> ...+ <aop:aspectj-autoproxy /> <bean id="aspect" class="com.exjample.AspectHouse"/> </beans>
※컴포넌트 스캔을 통해서 @Component 로 빈을 등록하는 방법도 존재합니다.
③pointcut 설정
@Aspect public class AspectHouse { @Pointcut("execution(public void package.class.method(..))") public void pointcut(){} @Around("Pointcut Method Name()") public void around(){} }
2.Log4j2
①pom.xml 에 maven 의존 추가
<dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-core</artifactId><!-- v16미만 에서 심각한 취약점발견 --> <version>2.17.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-api</artifactId> <version>2.17.0</version> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-slf4j-impl</artifactId> <version>2.17.0</version> </dependency>
※ 취약점이란, 홈페이지에 접속하는 것 만으로 서버 컴퓨터를 조종할 수 있을 정도의
심각한 취약점이니 미만의 버전을 절대로 사용하지 마세요.
②classpath 에 log4j2.xml 작성
작성예시
<?xml version="1.0" encoding="UTF-8"?> <Configuration status="INFO"> <Properties> <Property name="dbName">database</Property> <Property name="usrName">user</Property> <Property name="sprName">spring</Property> <Property name="path">logs</Property> <Property name="pattern">%d [%t] %-5level %c(%M:%L) - %m%n</Property> </Properties> <Appenders> <Console name="console" target="SYSTEM_OUT"> <PatternLayout pattern="${pattern}" /> </Console> <RollingFile name="dbfile" fileName="/${path}/${dbName}.log" filePattern="/${path}/${dbName}_%d{yyyy-MM-dd}_%i.log"> <PatternLayout pattern="${pattern}" /> <Policies> <!-- 일별 로그 파일 생성--> <TimeBasedTriggeringPolicy modulate="true" interval="1" /> <SizeBasedTriggeringPolicy size="10MB" /> </Policies> <DefaultRolloverStrategy max="365" fileIndex="min" /> </RollingFile> <RollingFile name="usrfile" fileName="/${path}/${usrName}.log" filePattern="/${path}/${logName}_%d{yyyy-MM-dd}_%i.log"> <PatternLayout pattern="${pattern}" /> <Policies> <TimeBasedTriggeringPolicy modulate="true" interval="1" /> <SizeBasedTriggeringPolicy size="10MB" /> </Policies> <DefaultRolloverStrategy max="365" fileIndex="min" /> </RollingFile> <RollingFile name="springfile" fileName="/${path}/${sprName}.log" filePattern="/${path}/${sprName}_%d{yyyy-MM-dd}_%i.log"> <PatternLayout pattern="${pattern}" /> <Policies> <TimeBasedTriggeringPolicy modulate="true" interval="1" /> <SizeBasedTriggeringPolicy size="10MB" /> </Policies> <DefaultRolloverStrategy max="365" fileIndex="min" /> </RollingFile> </Appenders> <Loggers> <Root level="DEBUG" additivity="false" > <AppenderRef ref="dbfile" /> <AppenderRef ref="usrfile" /> <AppenderRef ref="springfile" /> </Root> <logger name="org.springframework" level="INFO" additivity="false" > <AppenderRef ref="springfile" /> </logger> <Logger name="jdbc.sqltiming" level="TRACE" additivity="false"> <AppenderRef ref="dbfile" /> </Logger> <Logger name="log.UserLog" level="TRACE" additivity="false"> <AppenderRef ref="usrfile" /> <AppenderRef ref="console" /> </Logger> </Loggers> </Configuration>
더보기※classpath 는 .classpath 파일내부에 적혀있는 경로들중 한곳입니다.
예를들어 path="src/main/webapp" 일때 webapp안에 log4j2.xml을 작성합니다.
※보통은 resource 나 WEB-INF , webapp 등이 classpath 입니다.
※.classpath 내부에 <classpathentry kind="src" path="src/main/webapp"/> 를 추가해서
classpath 경로를 설정할 수 있습니다.
③logger 예시
public class UserLog { private static UserLog instance = null; final Logger logger = LogManager.getLogger(UserLog.class); private UserLog() {} public static UserLog getInstance() { if(instance != null) return instance; instance = new UserLog(); return instance; } public void log(String massage , Level... level) { try { logger.log(level[0],massage); }catch(NullPointerException e) { logger.log(Level.DEBUG,massage); } } }
log4j2.xml 에 작성한 log.UserLog 클래스 내부에서 log를 찍으면 결과가 파일에 보존됩니다.
다만, 특정 구간을 지정해서 로그를 사용하는 불편함이 문제라면 이와 같이 사용한다는 예시입니다.
'개발 > 개발환경구축' 카테고리의 다른 글
[Project Config] Spring에 Mybatis 혹은 JPA 연동하기 (0) 2022.11.30 [Windows] React 설치 및 Spring과 연동 (2) 2022.11.27 [Windows] Spring MVC 프로젝트 수동 생성 (0) 2022.11.24 [Project Config] Eclipse - JDBC 연동 (0) 2021.10.30 [Linux] Database 설치 및 설정 (0) 2021.10.25