ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Spring] 게시판 만들기(10) - log4j->logback으로 변경
    Spring/4.3.x - 게시판 만들기 2018. 12. 13. 15:20
    반응형

     로깅(Logging)은 개발 시에 오류 확인 및 처리를 위한 용도로 사용합니다. System.out.print()을 사용하면 되지 않나? 라는 의문이 생길 수 있지만 System.out.print() 리소스를 많이 사용하여 성능에 영향을 줄 수 있고 Logging을 사용하면 에러 및 장애 발생 시 확인할 수 최소한의 정보(날짜, 시간, 로그 타입 등)를 제공 받을 수 있으므로 System.out.println()보다 Logging을 사용하는 습관을 가지면 좋을 것 같습니다. 

     logback은 log4j를 만든 개발자가 log4j를 기반으로 만든 Logging 라이브러리로 logback 사용 시에 log4j보다 추가되는 장점이 많아 변경하는 작업을 진행하도록 하겠습니다. 
     

    1. POM.xml에 의존성 추가

    1_1. 프로젝트 생성 시에 추가된 Exclude Commons Logging in favor of SLF4j, Logging과 관련된 의존성을 삭제하세요.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    <org.slf4j-version>1.6.6</org.slf4j-version>
    <!--  Exclude Commons Logging in favor of SLF4j -->
    <exclusion>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
     </exclusion>
    <!-- Logging-->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>${org.slf4j-version}</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${org.slf4j-version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>${org.slf4j-version}</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.15</version>
        <exclusions>
            <exclusion>
                <groupId>javax.mail</groupId>
                <artifactId>mail</artifactId>
            </exclusion>
            <exclusion>
                <groupId>javax.jms</groupId>
                <artifactId>jms</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.sun.jdmk</groupId>
                <artifactId>jmxtools</artifactId>
            </exclusion>
            <exclusion>
                <groupId>com.sun.jmx</groupId>
                <artifactId>jmxri</artifactId>
            </exclusion>
        </exclusions>
        <scope>runtime</scope>
    </dependency>
    cs

     

    1_2. logback과 관련된 의존성을 추가하세요.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <org.slf4j.version>1.7.21</org.slf4j.version>
    <logback.version>1.1.7</logback.version>
     
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>${org.slf4j.version}</version>
    </dependency>
    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>${logback.version}</version>
    </dependency>
    cs

     

     

     

    2. logback.xml 추가

    src/main/resources 위치에 log4j.xml 을 삭제하고 logback.xml 을 추가하세요.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>  
        
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%d %-5level %logger - %msg%n</pattern>
              </layout>
        </appender>
      
          <logger name="org.springframework" level="info" additivity="false">
            <appender-ref ref="STDOUT"/>
        </logger>
      
          <logger name="com.spring.board" level="debug" additivity="false">
            <appender-ref ref="STDOUT"/>
        </logger>
        
          <root level="error">
            <appender-ref ref="STDOUT"/>
        </root>
      
    </configuration>
    cs

     

     

    3. 로그 확인

    3_1. MySQLConnectionTest.java 파일에 System.out.println을 logger.info로 변경한 후 JUnit으로 실행하세요. (SampleController.java 파일도 System.out.println을 logger로 변경하여 테스트해보세요.)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    package com.spring.board;
     
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
     
    import org.junit.Test;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
     
    public class MySQLConnectionTest {
        
        protected final Logger logger = LoggerFactory.getLogger(this.getClass());
     
        static final String DRIVER = "com.mysql.jdbc.Driver";
        static final String URL = "jdbc:mysql://127.0.0.1:3306/board?allowPublicKeyRetrieval=true&useSSL=false";
        static final String USERNAME = "board";
        static final String PASSWORD = "password1!";
     
        @Test
        public void getMySQLConnectionTest() {
            
            Connection conn = null;
            Statement stmt = null;
            
            try {
                
                logger.info("==================== MySQL Connection START ====================");
                
                Class.forName(DRIVER);
                
                conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
                stmt = conn.createStatement();
     
                String sql = "SELECT BOARD_SUBJECT, BOARD_CONTENT, BOARD_WRITER FROM TB_BOARD";
     
                ResultSet rs = stmt.executeQuery(sql);
                while (rs.next()) {
                    
                    String boardSubject = rs.getString("BOARD_SUBJECT");
                    String boardContent = rs.getString("BOARD_CONTENT");
                    String boardWriter = rs.getString("BOARD_WRITER");
     
                    logger.info("boardSubject : {}", boardSubject);
                    logger.info("boardContent: {}", boardContent);
                    logger.info("boardWriter: {}", boardWriter);
                    logger.info("========================================");
                    
                }
     
                rs.close();
                stmt.close();
                conn.close();
     
            } catch (SQLException se1) {
                se1.printStackTrace();
            } catch (Exception ex) {
                ex.printStackTrace();
            } finally {
                try {
                    if (stmt != null) {
                        stmt.close();
                    }
                } catch (SQLException se) {
                    se.printStackTrace();
                }
                try {
                    if (conn != null) {
                        conn.close();
                    }
                } catch (SQLException se) {
                    se.printStackTrace();
                }
            }
            
            logger.info("==================== MySQL Connection END ====================");
        }
    }
     
    cs

     

     

    소스 코드는 Github Repository - https://github.com/tychejin1218/board_v1 (branch : section10) 를 참조하세요.
    Github에서 프로젝트 가져오기 - https://tychejin.tistory.com/33

     

    반응형

    댓글

Designed by Tistory.