728x90
Spring - logging툴을 사용하는 이유?
System.out.println() 명령어는 IO리소스를 많이 사용하여 시스템이 느려질수 있다.
로그를 파일로 저장하여 분석할 필요가 있기 때문에 사용한다.
* logging툴의 종류
commons-logging : spring3 에서 사용하던 logging툴
log4j : 효율적인 메모리 관리로 그동안 많이 사용되었다.
logback : log4j보다 성능이 더 우수하여 최근에 많이 사용되고 있다.
*SLF4J : logback을 사용하기 위한 인터페이스
* 설정방법
1. pom.xml의 slf4j-version을 1.7.21로 수정
<properties> <java-version>1.8</java-version> <org.springframework-version>4.3.0.RELEASE</org.springframework-version> <org.aspectj-version>1.6.10</org.aspectj-version> <org.slf4j-version>1.7.21</org.slf4j-version> </properties> | cs |
2. pom.xml에 라이브러리 추가
<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.1.7</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>jcl-over-slf4j</artifactId> <version>${org.slf4j-version}</version> <scope>runtime</scope> </dependency> | cs |
3. src/main/resources 디렉토리에 logback.xml 파일 작성
<?xml version="1.0" encoding="UTF-8"?> <configuration> <!-- log4jdbc-log4j2 --> <logger name="jdbc.sqlonly" level="DEBUG"/> <logger name="jdbc.sqltiming" level="INFO"/> <logger name="jdbc.audit" level="WARN"/> <logger name="jdbc.resultset" level="ERROR"/> <logger name="jdbc.resultsettable" level="ERROR"/> <logger name="jdbc.connection" level="INFO"/> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <layout class="ch.qos.logback.classic.PatternLayout"> <pattern>%d{HH:mm:ss.SSS} [%thread] %-4level [%logger.%method:%line]- %msg%n</pattern> </layout> </appender> <appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <file>/WEB-INF/logback.log</file> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>logback.%d{yyyy-MM-dd}.log</fileNamePattern> <!-- 30일 지난 파일은 삭제한다. --> <maxHistory>30</maxHistory> </rollingPolicy> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-4level [%logger.%method:%line] - %msg %n</pattern> </encoder> </appender> <!-- 로그의 레벨( 지정된 로그 레벨 이상만 수집 ) : DEBUG < INFO < WARN < ERROR < FATAL --> <logger name="myweb" additivity="false"> <level value="INFO" /> <appender-ref ref="LOGFILE" /> <appender-ref ref="CONSOLE" /> </logger> <root> <level value="INFO" /> <appender-ref ref="CONSOLE" /> </root> </configuration> | cs |
4. 로그를 수집할 클래스에 변수를 선언
private static final Logger logger = LoggerFactory.getLogger(클래스이름.class); | cs |
5. 로그를 수집할 메서드에서 로그 수집 명령어 호출
logger.info("로그 타이틀", 출력할 값); | cs |
* 로그의 레벨
1) Debug : Debug, Info, Warn, Error 포함
2) Info : Info, Warn, Error 포함
3) Warn : Warn, Error 포함
4) Error : Error만 포함
package com.example.spring01; import java.sql.Connection; import java.sql.DriverManager; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class OracleConnectionTest { // Logger : OracleConnectionTest.class 현재의 class를 대상으로 log를 수집하겠다는 의미 // private : 외부에서 로그를 가로채지 못하게 하기 위해서 // static final : 로그 내용이 바뀌지 않으므로 private static final Logger logger = LoggerFactory.getLogger(OracleConnectionTest.class); // jdbc 오라클 드라이버 private static final String DRIVER = "oracle.jdbc.driver.OracleDriver"; // 오라클 연결 문자열 private static final String URL = "jdbc:oracle:thin:@localhost:1521:orcl"; // 사용자 아이디 private static final String USER = "spring"; // 비밀번호 private static final String PW = "1234"; // 테스트 JUnit @Test public void testConnection() throws Exception { Class.forName(DRIVER); try(Connection con = DriverManager.getConnection(URL, USER, PW)){ System.out.println(con); System.out.println("연결되었습니다."); logger.info("연결되었습니다."); } catch (Exception e) { e.printStackTrace(); } } } | cs |
출처 및 참고
https://www.youtube.com/watch?v=kDfacGNJLKY&list=PLY9pe3iUjRrRHaN7Sb8xxWS7Ir_PolLtk&index=3