Java Spring Boot 005-2 | Logging

Yunny.Log ·2022년 3월 3일
0

Spring Boot

목록 보기
24/80
post-thumbnail

Logging의 기본 개념들

  • logger 안 5개 함수
    1) info
    2) trace
    3) debug
    4) warn
    5) error

PostController 아래 추가

    @GetMapping("test-log")
    public void testLog(){
        logger.trace("Trace Log");
        logger.debug("debug log");
        logger.info("info log");
        logger.warn("warn log");
        logger.error("error log");
    }
  • 로깅은 어떤 일이 일었는 지에 대한 얘기를 남기는 형식으로 하기

Log 레벨
ALL < DEBUG < INFO < WARN < ERROR < FATAL < OFF

  • WARN을 로그 레벨로 지정을 하게 되면 그 아래 WARN, ERROR, FATAL까지 로그다

-application.yml에서 로그 레벨 지정하기

logging:
  level:
    root: debug
  • 레벨 지정한애 이상의 애들만 출력
java -jar spring-boot.jar --trace
java -jar spring-boot.jar --debug
  • trace, debug : 실행 인자로 직접 전달
  • logging.level.root : 어플리케이션 전체 기본 로그 레벨 설정
logging:
  level:
    root: warn
    #패키지 이름
    djbdy.jpa: info
  • 로그들이 실행 중이 때만 로그가 찍힘

Logback 설정법

  • Logger은 인터페이스
  • 우리는 Logger 인터페이스 기반의 Logback을 자주 사용하게 됨
  • java.util.logging, log4j, log4j2를 잇는 자바 로깅 프레임워크
  • spring-boot-starter-web 패키지 안에 Logback이 포함(출처)

LogBack

https://logback.qos.ch/manual/appenders.html

  • 스프링 부트에서 기본으로 사용하는 로깅 프레임
  • Appender 라는 인터페이스를 통해 logger의 동작 정의
    • 출력 위치, 파일 위치
    • 파일 생성 주기
  • xml을 통해 로그 레벨 및 appender 등 정의 가능

logback 공식 document - appender

  • 많은 appender들을 우리가 설정 통해서 사용 가능
    (ex) 일정 기간 동안만 로그 남아있게 하는 appender 등 ..

logback 사용해보기

1. resourcelogback-spring.xml 선언

  • 기본적으로 logback-spring.xml 이라고 선언해두면 이 설정을 스프링에서 고려하게 됨

logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <property name="LOGS" value="./logs" /> #{LOGS} 에 들어가는 애

    <appender name="Console"
    
    #Console 이라는 변수에다가 appender을 적용해주겠다는 
  class="ch.qos.logback.core.ConsoleAppender">
  # 클래스는 appender에서 기본적으로 구현하고 있는 애를 사용하겠다
        <layout class="ch.qos.logback.classic.PatternLayout">
        #어떤 패턴 줘서 메시지가 어떤 패턴으로 나올 지 정하는 애
        => 아래 대충 써진거 보면 로그가 날짜 부분은 검정으로 나왔다가 , 하이라이트 되는 부분 등 색 지정됨 (아래 사진 첨부)
            <Pattern>
                %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{0}): %msg%n%throwable
                
          # 클래스 이름, %c는 클래스명 자체만 출력하게 하도록      
            </Pattern>
        </layout>
    </appender>

    <appender name="RollingFile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOGS}/spring-boot-logger.log</file>
        #여기에 {LOGS}에 들어가는 것은 위에  
        # property name="LOGS" value="./logs" />  에서 
        # 알려준 VALUE 값이 들어가게 되는 것
        <encoder
                class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d %p %C{0} [%t] %m%n</Pattern>
        </encoder>

        <rollingPolicy
        
               #로그들을 여기서 정해진 파일 명으로 저장해주는 규칙
               #archived 라는 곳에 저장이 되게 된다
               
               class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd-HH-mm-ss}.%i.log
            #롤링폴리시에서 주기 선택할 때 위와 같이 
            </fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            #maxfile은 로그 파일의 최대 크기를 지정해놓은 것!~
            #용량 넘어가면 다음 파일로 넘겨서 추가 파일 생성
            <maxHistory>10</maxHistory>
            #아카이브에 들어갈 수 있는 최대 갯수
            <totalSizeCap>20GB</totalSizeCap>
            #총 사이즈
        </rollingPolicy>
    </appender>

    <root level="warn">
    #log leve 설정도 가능
    #이떄 루트의 경우엔 전체 어플리케이션에 적용되는 것
        <appender-ref ref="RollingFile" />
    
    #우리가 만들어놨던 로그 설정들을 appender-ref를 통해 가져다가 사용 가능
    # 로그 설정 해놔도 저 root 밑의 애들에 
    # appender-ref 를 통해 지정해주지 않으면
    # 해당 로그 설정 하나도 실행 안되게 된당
        
        
        <appender-ref ref="Console" />
    </root>

	# 로거에 이름을 주어서 어떤 패키지명 기준으로 로그 주는 것이 가능
    # 아래와 같이 로거 객체를 선언 ㅇ
    # 이 패키지(name)와 같은 로거들은
    # 즉 패키지명이 아래 name인 애들은
    # level에서 출력되게 해주세여~하는 것
    # additivity : 루트 로거와 별개 작성 여부에 관한 설정,
    # false 면 로그 이벤트가 부모에서 전달되지 않는다. 
    # true 면 로거와 동시에 false는 따로 취급
    <logger name="dev.aquashdw.jpa.aspect" level="trace" additivity="false">
        <appender-ref ref="Console" />
        #appender-ref는 어떤 어펜더 사용할 지 정해주는 것
        # 이렇게 설정되면 난 콘솔에 로그 출력할고얌 하는 것 
    </logger>


</configuration>
  • 로그 출력 결과

  • 위의 코드 돌리고나면 이렇게 logs 라는 파일도 생성됨ㅋ 먼가 기욥

  • policy에 맞춰 archived 에 생성됨


또한 플러스로 profile이 어떤 상태냐에 따라서 어떤 로그 xml을 실행시킬 건지 설정도 가능

logback-spring-test.xml 만들기

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

    <property name="LOGS" value="./logs" />

    <appender name="Console"
              class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                %black(%d{ISO8601}) %highlight(%-5level) [%blue(%t)] %yellow(%C{0}): %msg%n%throwable
            </Pattern>
        </layout>
    </appender>

    <appender name="RollingFile"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${LOGS}/spring-boot-logger.log</file>
        <encoder
                class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <Pattern>%d %p %C{0} [%t] %m%n</Pattern>
        </encoder>

        <rollingPolicy
                class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${LOGS}/archived/spring-boot-logger-%d{yyyy-MM-dd-HH-mm-ss}.%i.log
            </fileNamePattern>
            <maxFileSize>100MB</maxFileSize>
            <maxHistory>10</maxHistory>
            <totalSizeCap>20GB</totalSizeCap>
        </rollingPolicy>
    </appender>

    <root level="warn">
        <appender-ref ref="RollingFile" />
        <appender-ref ref="Console" />
    </root>
    <logger name="dev.aquashdw.jpa.aspect" level="trace" additivity="false">
        <appender-ref ref="Console" />
    </logger>

</configuration>

application-test.yml

  • application-test.yml 파일에서 logging 부분 지정해주기
logging:
  config: classpath:logback-spring-test.xml

0개의 댓글