2022년 04월 08일 TIL

yshjft·2022년 4월 8일
1

데브코스 TIL

목록 보기
15/45

Spring에서 제공하는 기능과 Spring Boot에서 제공되는 기능 구분 주의!!

Logging

일련의 사건을 시간의 경과에 따라 기록하는 것

Java Logging Framework

  • Logback(Spring Boot 기본적으로 사용한다)
  • SLF4J(Simple Logging Facade for Java)

SLF4J

  • 인터페이스를 제공하여 하위에 어떤 프레임워크를 사용하는지 모르게한다. 즉 Logging Framework들을 추상화 해놓은 것이다.
  • SLF4J는 다양한 로깅 프레임워크들을 동일한 방법으로 사용할 수 있도록 하였다.

Log Level

trace - debug - info - warn - error - off

ex) Log Level → warn
warn, error level의 log만 생성

ex) Log Level → debug
debug, info, warn, error의 log만 생성

Logger

public class KdtApplication {
	private final static Logger logger = LoggerFactory.getLogger(KdtApplication.class);

	public static void main(String[] args) { 
    	...
		logger.info("version -> {}", orderProperties.getVersion());
        ...
    }
}

logback 설정하기

logback 설정파일 찾기

  1. test/resources/ligback-test.xml
  2. main/resources/logback.groovy
  3. main/resources/logback.xml
  4. BasicConfiguration

logback.xml

  • logback layout
logback layout: 어떤 형식으로 log를 생성하는지 설정
<property name="CONSOLE_LOG_PATTERN" value ="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"/>
  • Appender
    어디에 어떤 포맷을 남길지 설정

    • ConsoleAppender
      log가 콘솔에 출력된다.

      <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
          <encoder>
              <pattern>${CONSOLE_LOG_PATTERN}</pattern>
          </encoder>
      </appender>
    • FileAppender
      log를 파일에 기록한다.

      working directory 기준으로 logs라는 디렉토리의 kdt.log 파일에 로그를 기록한다.
      <appender name="FILE1" class="ch.qos.logback.core.FileAppender">
            <file>logs/kdt.log</file>
            <append>false</append> <!-- false로 설정한 경우 파일을 매번 덮어 쓴다.-->
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </encoder>
      </appender>
      
      
      어플리케이션 실행 시점마다 다른 로그 파일을 생성한다.
      <timestamp key="bySecond" datePattern="yyyyMMdd'T'HHmmss"/>
      
      <appender name="FILE2" class="ch.qos.logback.core.FileAppender">
            <file>logs/kdt_${bySecond}.log</file>
            <encoder>
                <pattern>${FILE_LOG_PATTERN}</pattern>
            </encoder>
      </appender>
    • RollingFileAppender(TimeBasedRollingPolicy)

      • 장시간 구동되는 서버 환경에서 많이 사용되는 appender이다.

        • 하나의 파일에 모든 로그를 기록하는 것은 부담
      • TimeBasedRollingPolicy: 특정 시간이 지나면 파일이 만들어 진다.

        <appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
              <file>logs/access.log</file> O --- (1)
              <file>logs/access.log</file> X --- (2)
              <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>

        (1) <file>logs/access.log</file> 있는 경우

        2022년 04월 08일 어플리케이션 시작, access.log 생성 및 기록 →
        2022년 04월 09일 00시 기존 access.log가 access-2022-04-08.log로 변경되고 새로운 access.log(for 2022년 04월 09일) 생성

        (2) <file>logs/access.log</file> 없는 경우

        2022년 04월 08일 어플리케이션 시작, access-2022-04-08.log 생성 →
        2022년 04월 09일 00시, access-2022-04-09.log 생성

        최신 log는 access.log만 확인하면 된다.

  • logger

    • org.prgms.kdt: SET WARN
      패키지 하위 로깅 레벨 모두 WARN
      • org.prgms.kdt.A => WARN
    • org.prgms.kdt.voucher: SET INFO
      패키지 하위 모두 로깅 레벨 INFO
    • 동일한 appender를 사용할 경우 반드시 additivity: false를 설정해야 한다.
      <logger name="org.prgms.kdt" level="info" additivity="false">
         <appender-ref ref="STDOUT"/>
      </logger>
    
      <root level="warn">
         <appender-ref ref="STDOUT" />
      </root>
  • conversion
    conversion 직접 추가할 수 있으며 conversion에는 변수도 지정할 수 있다(red, yellow)

<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter">
</conversionRule>

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

Spring Boot

@SpringBootApplication

@SpringBootConfiguration

  • @Configuration 사용
  • Bean definition을 사용
  • 테스트 환경에서 자동으로 찾아진다는 장점
  • Spring Boot 어플리케이션에 단 1개 존재한다.
  • 필요한 경우 설정이 있을 경우 용도별로 @Configuration 사용

@ComponentScan

@SpringBootApplication이 있는 파일 기준 하위 패키지로 컴포넌트 스캔을 진행한다.

YAML에 대한 특별한 설정이 필요 없다, 별다른 설정 없이 외부 파일들을 사용할 수 있다.

  • 하지만 스프링 팀에서 설정을 하나의 클래스로 모델링 하는 것을 권장합니다.
  • SpringBoot는 기본적으로 yml 사용할 수 있다.

coc(conversion over configuration)

  • 설정보다 관례를 중요하게 한다
  • 모든 것을 다 설정하기 보다는 관례에 따르되 필요한 부분은 직접 설정하여 사용한다
  • 단순함과 유용성을 확보할 수 있다

Spring Boot Logging

Log Level 설정

  • applicaiotn.yml을 이용하여 설정할 수도 있고
  • logback.xml을 이용하여 기록할 수 도 있다.

외부 설정 가져오기

직접 작성하는 프로퍼티의 우선순위가 가장 낮다.

jar 파일 생성

Spring Boot의 Maven 플러그인을 이용하여 jar 패키지를 생성할 수 있다.

profile
꾸준히 나아가자 🐢

0개의 댓글