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