부트 개념과 활용-12.로깅(기본 로거 설정/커스터마이징)


로깅 1부 : 스트링 부트 기본 로거 설정

로깅 퍼사드 VS 로거

  • Commons Logging, SLF4j
  • JUL, Log4J2, Logback

SLF4j가 더 후에 나온 더 가볍고 안정적인 모듈
근데 스프링 코어 모듈 개발시 Commons Logging이미 쓰고 있었다.
그래서 사용하고 있음.

그러나 이후

스프링 5에 로거 관련 변경 사항

Commons Logging 가 아닌 SLF4j 혹은 Log4j2 로 변경할 수 있는
스프링-JCL이라는 모듈을 만들어서,
커먼스 로깅 코드를 컴파일 시점에 SLF4j or Log4j2로 변경해주는 모듈
그래서 그냥 jcl을 쓰면 된다.

정리하자면 핵심은
스프링 부트는 Commons Logging를 쓴다.
근데, Commons Logging를 쓰든 SLF4j쓰던 상관없다.

Commons Logging -> SLF4j 변환 후
SLF4j -> Logback으로 로그를 찍는다.

즉, Commons Logging -> SLF4j -> Logback 혹은 SLF4j -> Logback 이 차이일 뿐이다.

최종적으로 우리는 Logback을 쓴다.
우리가 보는 로그는 로그백이다.

Logback은 SLF4j의 구현체이다.

의존성을 보면 jul-to-slf4j (jul -> slf4j)
log4j-to-slf4j (log4j -> slf4j)

스프링 부트 로깅

  • 기본 포맷
  • –debug (일부 핵심 라이브러리만 디버깅 모드로) (embedded container, hibernate, and spring boot만)
  • –trace (전부 다 디버깅 모드로)
  • 컬러 출력: spring.output.ansi.enabled

    프로퍼티 파일
    spring.output.ansi.enabled=always

  • 파일 출력: logging.file 또는 logging.path (기본은 파일에만 출력한다)

    프로퍼티 파일
    logging.file.path=logs (경로)
    기본 10메가. 등 다양한 설정 가능

  • 로그 레벨 조정: logging.level.패지키 = 로그 레벨

    프로퍼티 파일 logging.level.org.springframework=debug (내가 만든 패키지가 아니어도 설정 가능) logging.level.me.jaeuk.properties=INFO

패키지별 로그레밸 설정 가능 인포로 설정했는데, 로그 디버그쓰면 출력 안됨.

private Logger logger = LoggerFactory.getLogger(SampleRunner.class);

@Override
public void run(ApplicationArguments args) throws Exception {
    logger.debug("==============");
    logger.debug(hello);
    logger.info(properties.getName());
    logger.info("==============");
}
2019-12-15 20:17:17.674  INFO 31079 --- [           main] m.j.properties.PropertiesApplication     : Started PropertiesApplication in 1.596 seconds (JVM running for 2.075)
2019-12-15 20:17:17.686  INFO 31079 --- [           main] me.jaeuk.properties.SampleRunner         : test jaeuk
2019-12-15 20:17:17.686  INFO 31079 --- [           main] me.jaeuk.properties.SampleRunner         : ==============

logger.info 만 출력되는 결과 확인 가능.

로깅 2부 : 커스터마이징

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html

커스텀 로그 설정 파일 사용하기

  • Logback: logback-spring.xml (logback.xml 동일) 생성
    (가장 추천 Logback과 똑같은데 Logback extension, 추가기능을 제공해준다. 프로파일이나, 인바이러먼트 프로퍼티 사용 가능)

  • Logback extension

    • 프로파일 <springProfile name=”프로파일”>
    • Environment 프로퍼티
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
    </root>
    <logger name="me.jaeuk" level="info"/>
</configuration>  

공식문서 훨씬 더 많고 자세한 내용 참조
https://docs.spring.io/spring-boot/docs/current/reference/html/howto.html#howto-logging

ex. 프로파일별 해당하는 로그도 설정 가능. (테스트는 이런 로그, 운영은 이런 로그) 등..

  • Log4J2: log4j2-spring.xml
  • JUL (비추): logging.properties

로거를 Log4j2로 변경하기
https://docs.spring.io/spring-boot/docs/current/reference/html/howto-logging.html#howto-configure-log4j-for-logging




© 2019. by jaeuk