Be-Developer

Logging library / Slf4j / logging level

Logging

  • 정보를 제공하는 일련의 기록인 log를 생성하도록 시스템을 작성하는 활동
  • 프린트 줄넣기는 간단한, 보통일시적인 로그를 생성한다.
  • 시스템 설계자들은 시스템의 복잡성때문에 로그를 이해하고 사용해야한다.
  • 로그가 제공하는 정보의 양은, 이상적으로는 프로그램이 실행되는 중에도, 설정가능해야 한다.

1) logging의 이점

  • 로그는 재현하기힘든 버그에 대한 유용한 정보를 제공할 수 있다.
  • 로그는 성능에 관한 통계와 정보를 제공할 수 있다.
  • 설정이 가능할 때 , 로그는 예기치 못한 특정 문제들을 디버그 하기 위해 그 문제들을 처리하도록 코드를 수정하여 다시 redeploy 하지 않아도, 일반적인 정보를 갈무리할 수 있게 한다.
  • System.out.print()
    • 출력되는 로그의 양, 수준을 조절할 수 없고, 로그를 파일에 저장할 수 없으며 성능면에서도 굉장히 낮다.

2) 로깅 라이브러리

  1. Java.util.logging
    • JDK 1.4 이후부터 생긴 표준 로그 라이브러리
    • 별도의 라이브러리를 추가할 필요가 없다.
    • 기능이 타 라이브러리보다는 부족.
  2. Apache Commons logging
  3. Log4j
    • Apache 재단에서 생성.
    • 가장 널리 사용됨.
  4. Logback
    • log4j를 만든이가 좀더 발달시켜 만든 로깅라이브러리.
    • log4j의 단점을 보완함

3) SLF4J

  • logging관련 라이브러리는 다양한데, 이러한 라이브러리를 하나의 통일된 방식으로 사용할 수 있는 방법을 제공.
  • Logging Facade이다. 로깅에 대한 추상레이어를 제공하고 , interface의 모음이다.
  • 어떤 라이브러리를 사용하던지 통일된 방법으로 사용할 수 있게 해줌.
  • 라이브러리가 변경되어도 메인코드는 변경될 필요가 없다는 장점.

4) Logging

  1. Appender
    • ConsoleAppender : 콘솔에 로그를 어떤 포맷으로 출력할지 설정
    • FileAppender : 파일에 로그를 어떤 포맷으로 출력할지 설정.
    • RollingFileAppender : 로그를 시간단위로 파일을 분리하여 출력하기위해 설정.
    • %-5level : 로그레벨을 5의 고정폭 값으로 출력
    • %logger{36} : logger의 이름을 축약해서 출력. 최대 36자리수로 출력
  2. 로그 출력 메소드
    • 문자열결합을 위해 + 연산자를 사용하지 않고 {} , 가변인자 형태로 사용한다.

Log Level

  1. TRACE
    본문중 디버깅에 필요한 정보를 출력할 때. SW의 유지보수를 용이하게 만들기 위한 목적. (특정 메서드의 한 파트를 tracing하려 할때)
  2. DEBUG
    본문중 디버깅에 필요한 정보를 출력할 때. SW의 유지보수를 용이하게 만들기 위한 목적. (Trace보다는 중요성있는 정보. ex) 메서드의 시작과 끝)
  3. INFO
    특정한 이벤트 포인트의 시작과 종료
  4. WARN
    비정상적인 상황을 만나 복원하여 정상 진행될수있을 때. (Such as switching from a primary to backup server, retrying an operation, missing secondary data, etc.)
  5. ERROR
    시스템이 유지는 되지만 분명한 문제가 발생했을 때, 부분적으로 오작동했을 가능성이 있을 때 (서비스나 application이 아닌 연산 오류)
  6. FATAL :치명적인 상황을 맞이하여 시스템이 더이상 유지될 수 없을때 (서비스나 application의 치명적 오류)

참고 [1] when to use different log levels : https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels
[2] slf4j log4j level : https://www.slf4j.org/api/org/apache/log4j/Level.html
[2] log, slf4j : https://www.edwith.org/boostcourse-web/lecture/16814/