로깅(Logging)이란?

 

로깅(Logging)이란 시스템의 작동 정보인 로그(log)를 기록하는 행위를 말한다. 시스템이 작동할 때 시스템의 작동 상태의 기록과 보존, 이용자의 습성 조사 및 시스템 동작의 분석 등을 하기 위해 작동 중의 각종 정보를 기록해둘 필요가 있는데, 이 기록을 만드는 것을 로깅이라 한다. 즉 로그 시스템의 사용에 관계된 일련의 사건을 시간의 경과에 따라 기록하는 것이다. 

 

log가 아닌 단순한 System.out.println()은 print() 메소드에 synchronized 키워드가 있어서 멀티쓰레드 환경에서 다른 쓰레드는 Block이 걸리게 된다. 그러면 다른 쓰레드는 일을 할 수 없기 때문에 성능저하가 발생할 수 있다. 

System.out.println() 메소드를 방치하면 I/O 요청이 발생할 때마다 쓸데없는 리소스를 잡아먹게 되는 것이다. 

 

Java에는 Log4j, Log4j2, Logback등의 로깅 프레임워크가 존재한다. 

 

 

 

 

 

Slf4j

Slf4j(Simple Logging Facaed for Java)는 로깅 프레임워크가 아닌 logger의 추상체로서 다른 로깅 프레임워크가 접근할 수 있도록 도와주는 추상화 계층이다. Log4j나 Logback 같은 로깅 프레임워크의 인터페이스 역할을 한다.

 

 

  • Slf4j는 추상 로깅 프레임워크이기 때문에 단독적으로 사용하지 않는다.
  • 코드상에서는 Slf4j의 interface코드를 사용하고 실제 로깅을 하는 구현체는 추가로 참조한 라이브러리에서 구현된다.
  • Java의 logging 모듈들은 Slf4j의 브릿지를 이미 제공한다. Slf4j와 Logback을 연결하기 위해서 추가로 무언가를 구현 할필요가 없다. logback을 쓰고 싶으면 slf4j-api를 log4j2를 쓰고 싶다면 log4j-slf4j-impl과 log4j-api를 추가하면 된다.

 

 

 

 

 

Log4j

Log4j는 Apache의 오래된 로깅 프레임워크로써 2015년 개발 중단이 되었다.

Log4j의 레벨

  • 속도에 최적화가 되어있다.
  • Multi-Thread 환경에서도 안전하다. (Thread-safe하다.)
  • 로그의 출력 형식을 쉽게 변경할 수 있다.
  • 출력을 파일, 콘솔, 원격서버, 등등 다양한 방식으로 내보낼 수 있고, 심지어 email로도 보낼 수 있다.
  • 아래와 같이 사용할 수 있다.
//파라미터 콘솔 로그에 찍기. 
Logger logger = Logger.getLogger(MemberController.class);
logger.debug("/member/checkMem params : " + params);

 

 

 

 

 

 

Logback

Log4j의 개발이 중단되면서 Log4j를 대체하기 위해 출시된 로깅 프레임워크이다.

 

  • Log4j와 아주 유사하면서도 향상된 성능과 필터링 옵션을 제공하며 Slf4j도 지원한다.
  • 특정 사용자(특정 조건)에서의 로그레벨을 변경하는 등의 필터 정책을 사용할 수 있다. (설정 로깅 레벨은 WARN이지만, A사용자가 로그인 한 경우에는 DEBUG 레벨로 로깅)
  • 자동 리로드가 가능하다. (서버 내에서 log4j를 사용할 시 log level을 변경 하게 되면, 서버를 재 가동하여 반영 사항을 적용 해줘야 한다. 하지만 logback.xml을 서버를 재가동할 필요 없이, 즉각 자동 리로드를 지원 해준다.)
  • SiftingAppender에서 여러가지 런타임 설정에 따라 로깅을 분리, 선별할 수 있다. 예를 들어, 사용자 세션에 따라 각각 개인의 로그 파일을 생성할 수 있다.

 

 

 

 

 

Log4j2

  • Logback고 동일하게 자동 리로드 기능과 필터링 기능이 있다.
  • Asynchronous Logger(비동기 로거) 도입하여 Log4j 1.x 및 Logback보다 멀티 스레드 환경에서 10배 가량 높은 처리량을 가진다.
  • 사용자 정의 로그 레벨 지원한다.
  • 람다 표현식 지원한다.
  • 메세지 템플릿 기능이 있다.
  • Filter를 이용한 Logging 이벤트 필터링이 가능하다.
  • 대부분의 Appender에 Layout 사용이 가능해 출력 포멧에 높은 자유도를 보인다.
  • Layout이 항상 byte array를 반환해 어떤 Appender와도 호환이 가능하다.
  • Syslog Appender가 TCP, UDP 및 BSD syslog를 지원한다.
  • 기존 Log4j 1.x 및 Logback에 존재했던 동기화 이슈를 해결했다.

'JAVA > JAVA' 카테고리의 다른 글

객체지향 설계 - SOLID  (0) 2021.12.10

+ Recent posts