코딩 기록들

게시판만들기 _ Logging 본문

카테고리 없음

게시판만들기 _ Logging

코딩펭귄 2024. 4. 2. 09:03

Spring Web Application의 실행기록을 작성하는 방법

-> Slf4j 인터페이스 기반의 오픈소스 라이브러리 사용.

  • Log4j
  • Logback
Application Log는 다음 이유로 반드시 필요하다.
  • Exception 추적.
  • 부정사용 적발 및 추적
  • 예상하지 못한 사용자 입력 

- 불과 몇 년 전 까지만 해도 Log4J 를 사용 -> 안전취약점이 발견됨에 따라 Logback 으로 전환하는 사례가 많아짐

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

 

Logback 라이브러리 설정방법

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

1. src/main/resources에 logback.xml 파일 생성 (파일이름 반드시 'logback.xml'로 설정)
2. 해당사이트에서 3번(Architecture), 4번(Appenders) 참고하여 아래와같이 작성

  * 4번(Appenders) 참고) 실무에서는 전부 RollingFileAppender (https://logback.qos.ch/manual/appenders.html)

  -> log text를 파일에 쓸 수 있음

   - rolling policy : 로그파일을 시간별로 자르는 것

   - history : 얼마 기간 동안 보관할 것인지

   - totalsizecap : 총 로그 양의 제한 용량 -> 이 제한을 넘어가면 지워가며 로그를 남기는 것

<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds"> 
<!-- logback 파일이 수정되어도 재기동하지 않음. 30초마다 체크함 -->

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

    </rollingPolicy>

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

  <!-- 범위(level) : Trace > Debug > Info > Warn > Error -->
  <root level="debug">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
  </root>
</configuration>

* 만약, 운영중인 사이트에서 예외발생 시작

-> logback level debug로 변경

-> Spring boot : 내부적으로 가지고있는 class, xml(logback), yml 파일의 변경을 감지하는 순간

-> 재기동 (서버를 내렸다가 올림)

-> 주문중인 사람들이 로그인이 풀려버림

-> 따라서, logback파일을 변경해도 재기동 하지 말라는 설정을 해줘야됨 =  configuration = ture 로 설정하면 : logback     파일이 바뀌어도 재기동하지 않음

 

Logback의 Log Pattern

    - (이 패턴대로 로그를 써달라)

 

Logback은 5개의 Log Level제공
- Trace > Debug > Info > Warn > Error   (error로 갈수록 로그의 출력 범위가 작아짐)

일반적으로 Debug와 Info를 많이 사용함

- 개발단계에서의 level = debug, open단계 = info로 바꿔서 로그를 남긴다

 

 

위처럼 로그 설정 이후,

System.out.println() 있는걸 전부 아래와 같이 바꿔주기!!
(system~은 느리고, 자원을 많이 차지하기 때문에 사용 지양)

- controller에서는 전부 -> logger.info() / 그 외에는 -> logger.debug()

 

 에러로그는 다음과 같이 쓴다

- 개발자가 볼 용도 : logger.debug

- 개발자 & 다른사람들 (개발자에게 굳이 필요없는 정보들) : logger.info

- 에러 : logger.error -- printStackTrace ->  error로 변경 ex) logger.error(e.getMessage(), e);