Spring/log

    Logback + MDC를 이용한 request 로깅

    MDC를 이용한 로깅 MDC Mapped Diagnostic Context Logging 을 남기고, 문제가 발생하여 Logging을 추적할 때 멀티쓰레드 환경에서 로그가 뒤섞여 요청별로 흐름을 파악하기가 힘듭니다. 이때 요청(Request)별로 요청의 흐름별로 로깅을 파악하면 문제 파악을 훨씬 용이하게 할 수 있습니다. MDC는 로깅 프레임워크에서 사용되는 기능이며 현재 실행중인 컨텍스트(혹은 쓰레드)에 메타 정보를 넣고 관리할 수 있는 공간입니다. 각각의 로그 메시지에 대한 컨텍스트 정보를 추가하여 제공하고, 로그 메시지를 보다 구체적이고 유용하게 만들어줍니다. 내부적으로 쓰레드 로컬을 사용하며 Map 형태로 되어있어, Key Value 형태로 값을 보관하고 꺼낼 수 있어 관리에 용이합니다. 즉 스레..

    Logback.xml include 태그 사용하여 깔끔하게 분리하기

    Logback을 사용하다 보면, 엄청나게 길어지는데요 이걸 줄여 깔끔하게 관리할 수 있는 방법이 있습니다. 태그는 주 구성 파일 내에서 외부 구성 파일을 포함하는 데 사용됩니다. 태그를 이용해 구성을 여러 파일로 분할하여 구성을 더 조직화하고 재사용할 수 있습니다. 먼저 분리할 파일을 생성합니다. console-appender.xml [%d{HH:mm:ss.SSS}][%-5level] [%thread] [%logger.%method:line%line] - %msg%n utf8 분리된 파일에 태그로 감싸줘야 합니다 다음 메인 파일에서 include(포함) 시킵니다. logback-spring.xml 태그로 포함시켜 줍니다. 이 때 디렉토리와 일치시켜줘야 합니다. 일반적으로 로그백 파일은 /src/main/..

    Logback 을 이용하여 AWS Cloud Watch에 로그 전송

    Spring 애플리케이션에서 Logback을 이용하여 AWS Cloud Watch로 전송하여 수집하는 방법에 대해 정리합니다. 의존성 추가 // https://mvnrepository.com/artifact/ca.pjer/logback-awslogs-appender implementation 'ca.pjer:logback-awslogs-appender:1.6.0' 2021년 1.6.0 버전 이후로 업데이트 되지 않고 있어서 유심히 알아보고 사용하는 것이 좋습니다. aws log dependency 1.5.0 을 사용하면 accessKey, secretAccessKey를 logback-spring.xml에 추가하지 않아도 동작합니다. 1.5.0은 aws cloudwatch credentials 인증을 ac..

    Logback 로그 Logger마다 다른 파일에 기록하는 방법

    SpringBoot에서 Logger마다 각기 다른 파일에 분리하는 방법에 대해 정리합니다. 1. 요구사항과 예제 에러 로그는 logs/error/error.log 에 기록되어야 한다 sql 실행 시간을 기록한 로그는 logs/sql/sql_execute_time.log 에 기록되어야 한다 warn 로그는 logs/warn/warn.log에 기록되어야 한다. 요구사항과 예제를 간단하게 구현한 클래스입니다. public class LoggerTest { private ErrorLogger errorLogger = new ErrorLogger(); private WarnLogger warnLogger = new WarnLogger(); private SqlLogger sqlLogger = new SqlLogg..

    Logback 사용 정리

    logback이란 log4j 이후에 나왔으며 log4j 보다 향상되고 가장 널리 사용되고 있는 Java 로깅 라이브러리 입니다. https://logback.qos.ch/index.html- 공식 문서 https://github.com/qos-ch/logback - Github https://logback.qos.ch/documentation.html - Docs slf4j의 구현체로써 SpringBoot의 기본 log로 사용되고 있으며 spring-boot-starter-web안에 spring-boot-starter-logging의 logback이 기본적으로 포함되어 있어서 별다른 dependency 추가 없이 사용할 수 있습니다. 또한 Automatic Reloading 기능을 제공하여 별도에 재시작..

    Java 로깅 logger, log4j, logback, slf4j 비교

    로그(log)는 소프트웨어의 이벤트를 시스템의 상태 및 동작 정보를 시간 경과에 따라 기록하는 것을 의미합니다. 소프트웨어 개발 과정 혹은 개발 후에 동작상태를 파악하여 문제가 발생했을 때 진단하고 해결하는데 도움이 됩니다. 또한 로그들은 운영과 관리에 도움이 되는 정보가 될 수 있으며 좋은 데이터가 되기도 합니다. 로그를 기록하는 행위를 로깅(logging)이라고 하며, Java 언어에서는 다양한 로깅 라이브러리를 지원합니다. 하지만 각각 로깅 라이브러리가 내부적으로 어떻게 동작하는지 모르면 성능상 이슈를 발생시킬 수 있기 때문에 어떤 상황에서 어떤 로깅 라이브러리를 써야할지 잘 알고 사용하는 것이 좋습니다. 디버깅이나, System.out.println(이하 sysout)이랑 비교했을 때 로깅 라이브..