IT/DevOps

Logback이란? (Logback설정하기)

반응형

Logback이란?

  • Java에서 가장 많이 사용되었던 로깅 라이브러리인 log4j의 후속 버전
  • Log4j를 만든 개발자가 Log4j를 기반으로 더 빠른 속도와 더 적은 메모리 점유율 등의 성능을 개발하여 만든 Logging Framework
  • LogBack Manual: http://logback.qos.ch/manual/index.html

Logback설정

appender :

  • 로그를 어떤 방식으로 넣을 것인지 설정
  1. ConsoleAppender: 콘솔에 로그를 기록
  2. FileAppender: 파일에 로그를 기록
  3. RollingFileAppender: 여러 개의 파일을 순회하며 로그를 기록
  4. SMTPAppender: 로그를 메일로 기록
  5. DBAppender: 데이터베이스에 로그를 기록

Log Level :

  • ERROR < WARN < INFO < DEBUG < TRACE
  • 위 순서대로 하위 레벨을 포함시켜서 로그를 찍어준다 (이게 중요한 포인트)
  1. ERROR: 요청을 처리하는 중 오류가 발생한 경우 표시한다.
  2. WARN: 처리 가능한 문제, 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지를 나타낸다.
  3. INFO: 상태변경과 같은 정보성 로그를 표시한다.
  4. DEBUG: 프로그램을 디버깅하기 위한 정보를 표시한다.
  5. TRACE: 추적 레벨은 Debug보다 훨씬 상세한 정보를 나타낸다.

Logger :

  • 어떤 부분에서(name) 로그를 어떤 appender 로 넣어줄 것인지 설정
  1. logger name="com.dursuneryilmaz" 는 클래스 위치를 지정한다
  2. appender-ref ref="stdout" 는 appender에서 설정한 name 이다
  3. level을 통해 어디까지 보여줄 것인지 설정하는 부분이다
  4. root 는 글로벌 로거이며 저 녀석을 넣어주면 로그가 두번찍힐 수 있으므로 포함관계를 잘 파악하여 설정해야한다
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true">

    <!-- pattern -->
    <property name="LOG_PATTERN" value="%-5level %d{yy-MM-dd HH:mm:ss}[%thread] [%logger{0}:%line] - %msg%n"/>

    <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <Pattern>
                ${LOG_PATTERN}
            </Pattern>
        </layout>
    </appender>

    <!--
    <logger name="org.springframework" level="DEBUG" >
        <appender-ref ref="stdout"/>
    </logger>
    -->

    <logger name="com.dursuneryilmaz" level="DEBUG" >
        <appender-ref ref="stdout"/>
    </logger>

        <!--
        <root level="INFO">
        <appender-ref ref="stdout"/>
    </root>
        -->

</configuration>

Log출력(logger사용)하기

  • 자바 컨트롤러에서 소스코드에서 로그를 출력하는 방법
    1. 아래 logger 관련된 import 추가
    2. private final Logger 추가
    3. logger.<loglevel>("log_test") 를 추가한다
  • log출력 예제
// #1번
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@RestController
@RequestMapping("/api/v1/")
@CrossOrigin()
public class EmployeeController {

        // #2번
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Autowired
    private IEmployeeService employeeService;

    //get all employees
    @GetMapping("/employees")
    public List<Employee> getAll() {

                // #3번
        logger.trace("employ_list");
        logger.debug("employ_list");
        logger.info("employ_list");
        logger.warn("employ_list");
        logger.error("employ_list");

        return employeeService.getAll();

    }
}
반응형