공부

로그 관리 (Logging)

항성 2022. 8. 27. 20:10
반응형
  • Logging

    프로그램 개발 중이나 완료 후 발생할 수 있는 오류에 대해 디버깅하거나, 운영중인 프로그램 상태를 모니터링하기 위해 필요한 정보(로그)를 기록하는 것.

    • Logging vs System.out.println()

      출력 형식을 지정할 수 있다.

      로그 레벨에 따라 남기고 싶은 로그를 별도로 지정할 수 있다.

      콘솔 뿐만 아니라 파일이나, 네트워크 등 로그를 별도의 위치에 남길 수 있다.

    • Logging vs Debugging

      프로그램의 절반은 디버깅. 디버깅을 할 수 없는 상황에서 로깅이 최선의 선택. (ex : 실서버 구동중)

      디버깅을 쓸 수 있다면 디버깅을 최대한 활용

    • Java의 주요 Logging Framework

      • native java.util.logging
      • Log4J : 몇 년 전까지 사실상 표준
      • Logback : Log4J 개발자가 만든 Log4J의 후속 버전. 많이 사용됨. (실무에서 대부분 사용)
      • SLF4J : Log4J 또는 Logback과 같은 Logger Framework의 facade pattern
      • tinylog
    • 로그 레벨

      TRACE > DEBUG > INFO > WARN > ERROR > FATAL

      FATAL : 아주 심각한 에러가 발생한 상태. 프로그램이 종료되는 경우가 많음.

      ERROR : 어떠한 요청을 처리하는 중 문제가 발생한 상태. 프로그램이 종료되지는 않음.

      (DB를 사용할 수 없는 상태, 중요 에러가 나오는 상황)

      WARN : 에러가 될 수 있는 잠재적인 가능성이 있는 경우

      INFO : 명확한 의도가 있는 에러. 요구 사항에 따라서 시스템의 동작을 보여줄 때.

      DEBUG : Info 레벨보다 더 자세한 정보가 필요한 경우. DEV 환경에서 사용.

      TRACE : DEBUG 레벨보다 더 자세함. DEV 환경에서 버그를 해결하기 위해 사용.

  • SLF4J (Simple Logging Facade for Java)

    logback, log4j와 같은 다양한 로깅 프레임워크에 대한 인터페이스 역할을 하는 라이브러리.

    인터페이스기 때문에 단독으로는 사용하지 않는다.

    어떤 logging library를 선택하든지 같은 방법으로 로그를 남길 수 있다.

    (로그 라이브러리를 교체하더라도 어플리케이션의 코드는 변경될 필요 없다)

    • 특징

      • 배포시에 Logging Framework 선택해서 사용 가능하다 (facade pattern)

        Untitled

        Facade를 사용하는 클라이언트는 Subsystem 객체에 직접 액세스할 필요가 없다.

        즉, 클라이언트는 Subsystem을 알 필요 없이 Common Interface(SLF4J)에만 접근.

    • SLF4J의 세 가지 모듈

      Untitled

      • SLF4J Bridging Modules

        SLF4J 이외 다른 로깅 API로의 Logger 호출을 SLF4J API로 연결. 일종의 어댑터 역할 수행

        여러 개 사용 가능.

        Binding 모듈에서 사용될 Framework와 달라야 함.

      • SLF4J API

        로깅에 대한 추상 레이어(인터페이스) 제공

        하나의 API 모듈에 하나의 Binding 모듈.

        인터페이스기 때문에 이 모듈만 단독적으로 쓰일 수 없음.

      • SLF4J Binding

        SLF4J API(인터페이스)를 로깅 구현체 (Logging Framework)와 연결.

        SLF4J API를 구현한 클래스에서 Binding으로 연결될 Logger의 API를 호출

        하나의 API 모듈에 하나의 Binding 모듈.

        binding된 logging framework가 실제 로깅 코드 수행

        ( 즉, 여러 개의 라이브러리를 통합해서 하나의 형태로 변환시키는 역할. 위 사진에서는 LogBack 형태로 변환.)

[Logging] SLF4J를 이용한 Logging - Heee's Development Blog

반응형

'공부' 카테고리의 다른 글

웹 브라우저에서의 통신 방법 (Polling, Long Polling, Streaming, Socket)  (1) 2022.08.27
자연키(Natural Key) vs 인조키(Artificial Key)  (0) 2022.08.10
HTTP란?  (0) 2022.08.09
WAS vs Web Server  (0) 2022.08.09
API란?  (0) 2022.08.09