Logging + Spring

alsdl0629·2024년 2월 15일
0

개발 지식

목록 보기
2/3
post-thumbnail

이번 글에서는 Logging에 대해 정리해 보려고 합니다.

Logging이란?


운영 중인 애플리케이션에서 발생하는 정보를 기록하는 것을 말합니다.
보통 시스템 로딩, HTTP 통신, 예외, 에러 등을 기록합니다.


Logging을 사용해야 하는 이유

Logging은 운영 중인 애플리케이션에서 문제가 발생했을 때, 문제의 원인을 파악하기 위한 용도로 사용됩니다.

Logging vs Debugging

애플리케이션을 개발할 때 문제가 발생하면 디버깅을 통해 원인을 파악할 수 있습니다.

하지만 실제 운영 중인 애플리케이션과 같이 디버깅을 할 수 없는 상황에서는 문제의 원인을 파악하기 힘듭니다.

그렇기 때문에 실제 운영 중인 애플리케이션의 정보를 확인하기 위해서는 Logging을 사용해야 합니다.

Spring에서 제공하는 Logging 프레임워크

SpringSLF4J라는 추상화 로깅 프레임워크를 제공합니다.
SLF4J는 다음과 같은 구조로 이루어져 있습니다.


SLF4J를 구현한 Log4j, Logback, Log4j2가 있습니다.
SLF4J는 인터페이스이기 때문에 단독으로 사용할 수 없고 구현체와 같이 사용해야 합니다.

의존성 역전 원칙을 적용했기 때문에 애플리케이션단에서 SLF4J를 의존하면
구현체가 변경되더라도 코드는 변경되지 않기 때문에 쉽게 구현체를 변경할 수 있습니다.

Logging 사용하기

@RestController
class LoggingController {
    private val logger = LoggerFactory.getLogger(this::class.java)

    @GetMapping("/log/error")
    fun logError(): String {
        logger.error("log error")
        return "error"
    }
    ...
}

Logging vs System.out.println

LoggingSystem.out.println의 차이점입니다.

  • 문제가 발생한 시간, 위치 등 출력 형식 지정 가능
  • 로그 레벨에 따라 남기고 싶은 로그 지정 가능
  • 파일, 메일, DB 등에 저장 가능
public void println() {
    newLine();
}

private void newLine() {
    try {
        synchronized (this) {
            ensureOpen();
            textOut.newLine();
            ...

그리고 System.out.println 내부에 synchronized가 있기 때문에 여러 쓰레드에서 동시에 요청하면 응답 시간이 느려지게 됩니다.

그러므로 실제 서비스에서는 Logging 프레임워크를 사용하는 것이 좋습니다.


참고 자료 🙇🙇🙇

https://www.youtube.com/watch?v=1MD5xbwznlI
https://hudi.blog/do-not-use-system-out-println-for-logging/

profile
인풋보다 아웃풋

0개의 댓글