SpringBoot #1.5 - 로그

텐저린티·2023년 6월 23일
0

데브코스

목록 보기
10/41
post-thumbnail
  • Loggin
  • LogBack

로깅 처리하기

Java Logging FrameWork

  • java.util.loggin
  • Apache Commons logging
  • Log4J
  • Logback
  • SLF4J(Simple Loggin Facade for Java)

SLF4J

  • logging framework 추상화한 것
  • Facade Pattern 이용한 로깅 프레임워크
    • 내부구조를 거대한 외벽 클래스로 감싸서 편리한 인터페이스 제공
  • 바인딩 모듈
    • 로깅 프레임워크를 연결하는 역할
    • logback-classic(logback), slf4j-log4j12(log4j2)

Log Level ( t > d > i > w > e )

  • trace
  • debug
  • info
  • warn
  • error

Logger

  • 이름 기반으로 생성
  • class 스코프에서 생성
private static final Logger logger = 
			LoggerFactory.getLogger(클래스.class);

logback 설정하기

  • logback 설정 파일 찾는 순서
    1. logback-test.xml (resource 폴더)

    2. 없으면 logback.groovy

    3. 그것도 없으면 logback.xml

    4. 모두 없으면 기본 설정 전략 BasicConfiguration

      <configuration>
      
      	<!-- 어디에 로그를 남길것인지 -> 현재값은 콘솔에 남김 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
          <!-- encoders are assigned the type
               ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
          <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%kvp- %msg%n</pattern>
          </encoder>
        </appender>
      
      	<!-- 파일별, 디렉토리별 디버깅 레벨을 설정할 수 있음 -> 필터링 가능 -->
      	<!-- appender-ref를 따로 설정한 경우 로깅이 중첩 -> additivity false 로 둬야 해결 -->
      	<logger name="com.devcourse.springorder" level="debug" additivity="false">
      	    <appender-ref ref="STDOUT"/>
        </logger>
      
      	<!-- 디버그 로깅 모드 --> 
        <root level="debug">
          <appender-ref ref="STDOUT" />
        </root>
      </configuration>

로그 appender 설정

  • ConsoleAppender : 콘솔
  • FileAppender : 파일
  • RollingFileAppender
<timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>${LOG_PATTERN}</pattern>
    </encoder>
</appender>

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <!-- 해당 경로의 로그 파일에 계속 append -->
    <file>logs/kdt.log</file>
    <!-- 각 로그마다 다른 파일로 기록되도록 하고 싶을 때 -->
    <file>logs/kdt_${bySecond}.log</file>
    <encoder>
        <pattern>${LOG_PATTERN}</pattern>
    </encoder>
</appender>

<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <!-- access.log 파일에는 오늘(최신)의 로그가 저장 -->
    <!-- 롤링으로 설정한 파일에는 그날의 첫 로그가 저장 -->
    <file>logs/access.log</file>
    <!-- TimeBasedRollingPolicy에는 무얼 만들것인가, 언제 만들것인가가 모두 들어있으므로, 이거 하나로 설정 완료된 것 -->
    <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.devcourse.springorder" level="debug">
    <appender-ref ref="ROLLING_FILE" />
</logger>

PatternLayout

  • 로거에서 만든 로깅 이벤트로 문자열 변환 가능
  • 문자열 변환 시 conversion specifiers 이용
  • %d : 로깅 이벤트 날짜 출력
    • %date{ISO8601}, %date{HH:mm:ss.SSS} 같은 데이터 타임 패턴 이용 가능
  • %logger{length}
    • Logger name 이름 축약 가능
    • length = (최대자릿수)
  • %thread
    • 현재 스레드 이름
  • %-5level
    • log level -5 는 출력 고정폭 값
      • 를 주면 오른쪽 공백에 패딩처리 → 왼쪽 정렬
    • +를 주면 왼쪽 공백에 패딩처리 → 오른 정렬
  • %msg
    • 로그 메시지
  • %n
    • 개행
<property name="LOG_PATTERN" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>

<appender ...>
        <encoder>
            <pattern>${LOG_PATTERN}</pattern>
        </encoder>
</appender>

Conversion

  • conversionRule을 이용하면 PatternLayout에서 쓴 conversion 문자 추가 가능
  • 색깔 설정도 가능
    • 다만, File에서는 색 정보까지 로그에 기록되므로, property에서 콘솔과 파일 로그 패턴을 구분해서 사용하는 것이 좋음
profile
개발하고 말테야

0개의 댓글

관련 채용 정보