본문 바로가기

개발/Spring

log4j2 + slf4j 설정하기 ( + lombok)

반응형

- 새로운 프로젝트의 프레임워크 셋팅을 담당하게 되었다. 로그 관련 설정을 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 에 설정한대로 콘솔과 파일에서 로그를 확인할 수 있다!

반응형