-
Spring - log4j 사용하기Spring 2019. 2. 20. 13:31
log4j 란?
프로그램이 돌아가면서 필요한 내용에 대한 로그를 남기는 기능을 제공한다.
사용법
Logger l = Logger.getLogger(클래스명.class); l.debug("로그 메시지");
slf4j (Simple Logging Facade For Java)
slf4j : 특정 Logging 서비스 구현체에 종속되지 않도록 추상화 계층을 제공하며, 여러 종류의 로그를 연동할 수 있다.
slf4j 사용법
Logger l = LoggerFactory.getLogger(클래스명.class); l.debug("로그 메시지");
log4j.xml 설명
Appenders
로그에 대한 환경설정이다.
layaout 태그로 로그의 출력 형식을 지정할 수 있다.
PatternLayout을 사용할 때만 param으로 패턴을 지정해줘야 한다.- 레이아웃 종류
- HTMLLayout
- SimpleLayout
- PatternLayout
- xml.XMLLayout
- 레이아웃 종류
출력 패턴
패턴 설명 %c 카테고리명(logger이름)을 표시한다. (카테고리명이 a.b.c일때, %c{2}는 b.c를 출력) %C 클래스명을 표시한다. (풀 클래스 명이 com.log.logger일때, %C{2}는 log.logger를 출력) %d 로그 시간을 출력한다. java.text.SimpleDateFormat에서 적절한 출력 포맷을 지정할 수 있다. %F 파일명을 출력. 로그시 수행한 메소드, 라인번호가 함께 출력된다. %l 로깅이 발생한 caller의 위치정보. 자바파일명:라인번호(링크제공) %L 라인 번호만 출력한다(링크없음) %m 로그로 전달된 메시지를 출력한다. %M 로그를 수행한 메소드명을 출력한다. %n 플랫폼 종속적인 개행문자를 출력한다. rn 또는 n %p 로그 이벤트명등의 priority 가 출력(debug, info, warn, error, fatal ) %r 로그 처리시간 (milliseconds) %t 로그이벤트가 발생된 쓰레드의 이름을 출력한다. %% % 기호를 출력한다. %r 어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds) %X 로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context)를 출력한다. %X{key} 형태. loggers
<logger name="com.kh.spring"> <level value="debug" /> </logger>
name 속성에 들어가는 패키지 이하에 있는 것들에 대한 로그를 남긴다.
level 값에 따라 출력이 달라진다.로거 레벨 : debug < info < warn < error < fatal
root
appender-ref 태그로 사용할 appender를 지정한다.
여러 개의 appender를 지정할 수 있다.- %d{HH:mm:ss, SSS}
- %d{yyyy MMM dd HH:mm:ss, SSS}
- %d{ABSOLUTE}
- %d{DATE}
- %d{ISO8601}
- %d{HH:mm:ss, SSS}
파일에 로그를 출력하기
appender 를 추가한다.
<appender name="fileLogger" class="org.apache.log4j.DailyRollingFileAppender"> <param name="file" value="${catalina.base}${file.separator}logs${file.separator}spring${file.separator}spring.log"/> <param name="Append" value="true"/> <param name="dataPattern" value=".yyyy-MM-dd"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p: [%d{MM-dd HH:mm:ss}] : [%F:%L] - %m%n" /> </layout> </appender>
root에 appender-ref 를 추가
DB 로그 출력하기
sql이나 디비에서 가져오는 데이터를 로그로 출력할 수 있다.
- pom.xml 에 Log4Jdbc-remix 넣기
<!-- https://mvnrepository.com/artifact/org.lazyluke/log4jdbc-remix --> <dependency> <groupId>org.lazyluke</groupId> <artifactId>log4jdbc-remix</artifactId> <version>0.2.7</version> </dependency>
root-context 에 dataSource -> realDataSource 로 변경 한 후 sqlSessionFactoryBean 사이에 bean 추가
<bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource"> <constructor-arg ref="realDataSource"></constructor-arg> <property name="logFormatter"> <bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter"> <property name="loggingType" value="MULTI_LINE"/> <property name="sqlPrefix" value="[SQL]"/> </bean> </property> </bean>
log4j.xml 에 appender 등록
<appender name="sqlLogger" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p:%m%n"/> </layout> </appender>
logger 추가 (additivity 속성은 다른 logger에 영향을 줄 것인지에 대한 속성)
<logger name="jdbc.sqlonly" additivity="false"> <level value="info"/> <appender-ref ref="sqlLogger"/> </logger> <logger name="jdbc.resultsettable" additivity="false"> <level value="info"/> <appender-ref ref="sqlLogger"/> </logger>
이제 데이터베이스와 통신할 때 로그가 찍힌다.
log4j.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> <log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"> <!-- Appenders --> <appender name="console" class="org.apache.log4j.ConsoleAppender"> <param name="Target" value="System.out" /> <!-- <layout class="org.apache.log4j.HTMLLayout"> --> <!-- <layout class="org.apache.log4j.SimpleLayout"> --> <!-- <layout class="org.apache.log4j.xml.XMLLayout">--> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p: [%d{MM-dd HH:mm:ss}] : [%l] - %m%n" /> </layout> </appender> <appender name="fileLogger" class="org.apache.log4j.DailyRollingFileAppender"> <param name="file" value="d:${file.separator}logs${file.separator}spring${file.separator}spring.log"/> <param name="Append" value="true"/> <param name="dataPattern" value=".yyyy-MM-dd"/> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p: [%d{MM-dd HH:mm:ss}] : [%F:%L] - %m%n" /> </layout> </appender> <appender name="sqlLogger" class="org.apache.log4j.ConsoleAppender"> <layout class="org.apache.log4j.PatternLayout"> <param name="ConversionPattern" value="%-5p:%m%n"/> </layout> </appender> <!-- Application Loggers --> <logger name="jdbc.sqlonly" additivity="false"> <level value="info"/> <appender-ref ref="sqlLogger"/> </logger> <logger name="jdbc.resultsettable" additivity="false"> <level value="info"/> <appender-ref ref="sqlLogger"/> </logger> <logger name="com.kh.spring"> <level value="debug" /> </logger> <!-- 3rdparty Loggers --> <logger name="org.springframework.core"> <level value="info" /> </logger> <logger name="org.springframework.beans"> <level value="info" /> </logger> <logger name="org.springframework.context"> <level value="info" /> </logger> <logger name="org.springframework.web"> <level value="info" /> </logger> <!-- Root Logger --> <root> <priority value="warn" /> <appender-ref ref="console" /> <appender-ref ref="fileLogger"/> </root> </log4j:configuration>
root-context.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- Root Context: defines shared resources visible to all other web components --> <bean id="realDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/> <property name="username" value="spring"/> <property name="password" value="spring"/> </bean> <bean id="dataSource" class="net.sf.log4jdbc.Log4jdbcProxyDataSource"> <constructor-arg ref="realDataSource"></constructor-arg> <property name="logFormatter"> <bean class="net.sf.log4jdbc.tools.Log4JdbcCustomFormatter"> <property name="loggingType" value="MULTI_LINE"/> <property name="sqlPrefix" value="[SQL]"/> </bean> </property> </bean> <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"/> <property name="mapperLocations" value="classpath*:mapper/**/*.xml"/> <property name="configLocation" value="classpath:mybatis-config.xml"/> </bean> <bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> <constructor-arg index="0" ref="sqlSessionFactoryBean"/> </bean> </beans>
반응형'Spring' 카테고리의 다른 글
Spring - 파일 다운로드 하기 (0) 2019.02.25 Spring - 파일 업로드 하기 (0) 2019.02.23 Spring - MyBatis 설정하기 (0) 2019.02.20 Spring - 설정하기 (0) 2019.02.20 Spring - 개발 환경 구성하기(STS, Maven) (0) 2019.02.18