반응형
- 새로운 프로젝트의 프레임워크 셋팅을 담당하게 되었다. 로그 관련 설정을 log4j2 와 slf4j 를 쓰라고 하셔서 셋팅해보게 되었다.
1. 라이브러리 추가
pom.xml 에 log4j2 와 slf4j 의 의존성을 추가해준다. 나는 @Slf4j 어노테이션도 함께 쓰고싶어서 lombok도 추가!
//버전 관리를 위해 properties 에 버전명을 따로 선언해둔다. 아래에 ${slf4j.version} 을 작성하면 여기 명시된 버전이 들어가므로 유지보수에 편리하다.
<properties>
<!-- Logging -->
<slf4j.version>1.7.32</slf4j.version>
<log4j.version>2.16.0</log4j.version>
<log4j2.version>2.16.0</log4j2.version>
</properties>
<dependencies>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
<scope>compile</scope>
</dependency>
<!-- apache commons logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<!-- log4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>log4j-over-slf4j</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>${log4j.version}</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>${log4j.version}</version>
</dependency>
<!-- =================================================================== -->
<!-- lombok -->
<!-- =================================================================== -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
</dependencies>
2. log4j2.xml 파일을 추가한다. (파일 위치 : src/main/resoruces/log4j2.xml )
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Properties>
<Property name="logName">Log4j2TestProject</Property>
<Property name="layoutPattern">[%d] %-5level [%thread] %C{100} %M - %msg%n</Property>
</Properties>
<!-- 콘솔, 파일에 찍을 때 형식 및 설정 셋팅-->
<Appenders>
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="[%d{HH:mm:ss.SSS}] %-5level [%thread] %C{100} %M - %msg%n" />
</Console>
<RollingFile name="file" fileName="${TESTPROJECT.root}/WEB-INF/logs/${logName}.log" filePattern="${TESTPROJECT.root}/WEB-INF/logs/${logName}_%d{yyyy-MM-dd}.log">
<PatternLayout pattern="${layoutPattern}" />
<Policies>
<SizeBasedTriggeringPolicy size="10MB" /> <!-- 10MB 용량이 초과시 DefaultRolloverStrategy 정책만큼 넘버링 -->
<TimeBasedTriggeringPolicy interval="1" /><!-- 일별 로그 파일 생성-->
</Policies>
<DefaultRolloverStrategy max="30" fileIndex="min" /><!-- 롤링 파일 500개 까지 생성 -->
</RollingFile>
</Appenders>
<Loggers>
<!-- =================================================================== -->
<!-- TESTPROJECT specific Logger setting -->
<!-- =================================================================== -->
<logger name="com.test.project" level="debug" additivity="false">
<AppenderRef ref="console" /> <!-- 콘솔에 로그 찍겠단 뜻 -->
<AppenderRef ref="file" /> <!-- 파일에 로그 찍겠단 뜻 --?
</logger>
<!-- =================================================================== -->
<!-- SPRING -->
<!-- =================================================================== -->
<logger name="org.springframework.core" level="error" additivity="false" >
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</logger>
<logger name="org.springframework.beans" level="error" additivity="false" >
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</logger>
<logger name="org.springframework.context" level="error" additivity="false" >
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</logger>
<logger name="org.springframework.web" level="error" additivity="false" >
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</logger>
<!-- =================================================================== -->
<!-- JDBC -->
<!-- =================================================================== -->
<logger name="org.springframework.jdbc" level="error" additivity="false" >
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</logger>
<logger name="jdbc.sqltiming" level="error" additivity="false" >
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</logger>
<logger name="jdbc.sqlonly" level="error" additivity="false" >
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</logger>
<logger name="jdbc.connection" level="error" additivity="false" >
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</logger>
<logger name="jdbc.resultset" level="error" additivity="false" >
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</logger>
<logger name="jdbc.audit" level="error" additivity="false" >
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</logger>
<logger name="jdbc.resultsettable" level="error" additivity="false" >
<AppenderRef ref="console" />
<AppenderRef ref="file" />
</logger>
<!-- =================================================================== -->
<!-- Root(Default) Setting -->
<!-- =================================================================== -->
<!-- off, fatal, error, warn, info, debug, trace, all -->
<Root level="debug" additivity="false">
<AppenderRef ref="file"/>
<AppenderRef ref="console" />
</Root>
</Loggers>
</Configuration>
이러면 설정은 끝이다.
@Slf4j 어노테이션을 사용해서 java단에서 log.debug(""); 이런식으로 로그를 바로 남길 수 있고 log4j2.xml 에 설정한대로 콘솔과 파일에서 로그를 확인할 수 있다!
반응형
'개발 > Spring' 카테고리의 다른 글
Spring 비동기 처리 @Async 어노테이션 사용 (0) | 2022.03.11 |
---|---|
nested exception is org.apache.ibatis.binding.BindingException: Parameter 'fromDate' not found. (0) | 2022.02.16 |
Spring HandlerInterceptorAdapter deprecated 해결. (1) | 2022.01.17 |
[Spring] @Valiated, BindingResult 사용하여 데이터 유효성 검증하기 (2) | 2022.01.07 |
[Spring] @Valid 와 @Validated 차이 (1) | 2022.01.04 |