(SpringBoot) Logging

soosoorim·2024년 4월 1일
0

Logging

  • Spring Web Application의 실행기록을 작성하는 방법
  • Slf4j 인터페이스 기반의 오픈소스 라이브러리 사용.
    -- Log4j
    -- Logback

  • Application Log는 다음 이유로 반드시 필요하다.

  1. Exception 추적
  2. 부정사용 적발 및 추적
  3. 예상하지 못한 사용자 입력 값 등등
  • 불과 몇 년 전 까지만 해도 Log4J 를 사용했지만 보안취약점이 발견됨에 따라 Logback 으로 전환하는 사례가 많아졌다.

  • Spring Boot에서 Logback 라이브러리가 기본 포함되어 있어서 별도의 라이브러리 추가는 필요 없다.

설정
https://logback.qos.ch/manual/ 에서 설정 방법 확인

xml 파일에 작성

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">

  <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 name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>C:/logs/hellospring.log</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
      <!-- daily rollover -->
      <fileNamePattern>C:/logs/hellospring.%d{yyyy-MM-dd}.log</fileNamePattern>
    </rollingPolicy>

    <encoder>
      <pattern>%-4relative [%thread] %-5level %logger{35} -%kvp- %msg%n</pattern>
    </encoder>
  </appender> 

  <root level="debug">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>
</configuration>

Logback의 Log Pattern

  • Logback은 5개의 Log Level 제공

Trace > Debug > Info > Warn > Error

일반적으로 Debug와 Info를 많이 사용한다.
개발할때에는 debug / 오픈할때는 info

<root level="debug">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>

Log에는 DEBUG, INFO, WARN, ERROR만 보인다.

파일이 변경 감지가 되었을 때 서버가 자동으로 재기동 되는 것 방지 하는 검사

<!-- logback 설정 
scan: logback 설정 파일 변경 검사 여부 
scanPeriod: 몇 초 주기로 변경 검사를 시행할 것인지 설정 -->
<configuration scan="true" scanPeriod="30 seconds">
<appender>
...생략

logging 으로 바뀌는 설정

system.out.println(); ==> logging.info / logging.debug
printStackTrace ==> logger.error(e.getMessage(), e);

상단에 작성 후 모든 system.out.println(); 부분을 바꾼다.

0개의 댓글

관련 채용 정보