본문 바로가기
모각코

[모각코 3회차] logback 설정

by moonstal 2022. 7. 22.

목표: logback 설정 정리

로깅

  • 시스템을 작동할 때 시스템의 작동 상태의 기록과 보존, 이용자의 습성 조사 및 시스
    템 동작의 분석 등을 하기 위해 작동중의 각종 정보를 기록해둘 필요가 있다. 이 기록
    을 만드는 것
  • System.out.println: 상황별 구분 불가, 저장불가, 대량로그 시스템 성능문제
  • 로깅 framework: Log4J, Logback, SLF4J

SLF4J

  • Logging Framework들을 추상화해 놓은 것
  • Facade Pattern을 이용
  • Facade Pattern: 서브시스템을 거대한 클래스로 만들어 감싸서 편리한 인터페이스를 제공
  • 바인딩 모듈(로깅 프레임워크 연결)을 통해 처리

Log Level

  1. trace
  2. debug
  3. info
  4. warn
  5. error

로거 생성: 로거 팩토리, 클래스 레벨에서

    //사용
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    //로거 생성해주기
    //로거 이름을 통해서 로깅을 제어 com.example.order.LoggingTest
    //클래스 이름으로 전달
    private static final Logger log = LoggerFactory.getLogger(LoggingTest.class);

    //이전 코드
    System.out.println(MessageFormat.format("description->{0}", orderProperties.getDescription()));

    //info레벨로 출력
    //MessageFormat없이도 가능
    //출력결과 09:54:23.584 [main] INFO com.example.order.LoggingTest - description->line 1 default
    log.info("description->{}", orderProperties.getDescription());

    //출력결과 09:54:23.584 [main] INFO com.example.order.LoggingTest - logger name=> com.example.order.LoggingTest
    log.info("logger name=> {}", log.getName());

logback 설정

설정파일 찾는 순서

  1. logback-test.xml
  2. logback.groovy
  3. logback.xml
  4. 기본 설정 전략

사용

Logback 공식문서의 Basic configuration file를 복사
Logback manual

<configuration>

    <!--색바꾸기-->
    <conversionRule
            conversionWord="clr"
            converterClass="org.springframework.boot.logging.logback.ColorConverter"/>

    <property name="CONSOLE_LOG_PATTERN" value="%clr(%d{HH:mm:ss.SSS}){red} [%thread] %-5level %logger{36} - %msg%n"/>

    <!-- 패턴을 변수처럼 사용가능 -->
    <property name="LOG_PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>

    <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>


    <!-- 어디에 어떤 포맷으로 로그기록(콘솔, 파일..) -->
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <!-- 패턴지정 -->
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!-- 로그파일로 생성 -->
    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
        <!-- <file>logs/order.log</file> -->

        <!-- 새로 구동 될 때마다 파일 생성 -->
        <file>logs/order_${bySecond}.log</file>

        <!-- 오버라이딩 -->
        <append>false</append>
        <encoder>
            <pattern>${CONSOLE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <!--파일 시간에 따라 자동 생성-->
    <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <!--현재: access.log 파일, 하루지나면 fileNamePattern 따라서 파일 생성-->
        <file>logs/access.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>logs/access-%d{yyyy.MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
    </appender>

    <logger name="com.example.order" level="debug">
        <appender-ref ref="ROLLING_FILE" />
    </logger>

    <!-- additivity="false" 중첩방지 -->
    <logger name="com.example.order" level="debug" additivity="false"> 
        <appender-ref ref="STDOUT" />
    </logger>
    <!-- 또는 -->
    <logger name="com.example.order" level="debug"/>

    <!-- 루트:모든 레벨에 적용 -->
    <root level="debug"> 
        <!-- STDOUT: appender이름 -->
        <appender-ref ref="STDOUT" /> 
    </root>
</configuration>

@프로그래머스 미니 데브코스 & CNU SW Academy 강의 내용 정리