본문

Log4j

반응형

# Log4j

Log4j는 자바기반의 로깅 유틸리티로, Apache에서 만든 오픈소스 라이브러리다. 갑자기 로그라고 하면 이게 무엇인가, 그걸 대체 어따 써먹는것인가!!!! 라고 생각할 수 있지만, 로그는 우리가 굉장히 많이 쓰고 있다. 예를 들어서, 개발을 하다가 어떤 변수의 값을 확인하고 싶으면 자연스럽게 System.out.println()으로 출력을 하는데, 이런것들이 모두 로그의 한 종류라고 생각할 수 있다.


그러면 그냥 System.out.println()으로 출력하면 되는데 왜 귀찮게 다른걸 사용하냐는 의문이 들 수 있다. 사실 우리가 혼자서 그냥 연습삼아 프로젝트를 만들거나 하면 System.out.println()은 큰 문제가 없지만, 실제 프로젝트는 혼자서 하는것도 아니고, 또 시스템 운영시에는 큰 문제를 야기한다.


간단하게 살펴보면

(1) 운영시에 불필요한 로그가 계속 출력된다. 

- 시스템을 개발하고 운영할 때, System.out.println()을 모두 찾아서 지워준다면 몰라도, 거의 대부분은 그냥 한다....ㅡ_ㅡ; 

그러면 쓸모없는 로그로 아까운 리소스가 낭비된다.


(2) 모든 로그를 지워버리면, 에러가 났을경우, 그 에러 원인을 찾기가 어려울 수도 있다.

- 예를 들어, 시스템에 중대한 에러가 날 경우, 로그를 출력해놓도록 해놨는데, 위에서 System.out.println을 모두 지워버렸다면, 로그가 안남을 수도 있다.


(3) 성능에 큰 영향을 미친다. 

- 사실 가장 중요한 문제다. 우리가 프로그램을 실행하다가 System.out.println()을 굉장히 많이 호출하면 프로그램의 전체적인 성능이 떨어지는것을 확인할 수 있다. 예를 들어 1부터 100까지를 모두 더하는 프로그램을 만들었을때, 로그를 하나도 안찍으면 정말 0.01초도 안걸려서 끝나지만, 그 계산과정을 모두 System.out.println()으로 화면에 찍어보면....한참 걸린다...  특히 다중사용자를 처리해야 하는 웹에서 System.out.println()은 정말 큰 문제를 만들어버린다. 



Log4j는 위에서 간단히 이야기 한 문제점을들 손쉽게 해결할 수 있다. Logj4는 시스템의 성능에 큰 영향을 미치지 않으면서도, 옵션 설정을 통해서 다양한 로깅 방법을 제공한다. 환경설정을 통해서 선택적인 로그를 남긴다거나, 특정 파일등에 로그를 생성하는 등 다양한 이점을 가지고 있다. 


Log4j의 구조는 다음과 같다.

 요소

설명 

Logger

 출력할 메시지를 Appender에 전달한다.

Appender

 전달된 로그를 어디에 출력할 지 결정한다.(콜솔 출력, 파일 기록, DB 저장 등) 

Layout 

 로그를 어떤 형식으로 출력할 지 결정한다.



Log4j는 다음과 같은 로그 레벨을 가진다.

 로그 레벨

설명 

FATAL 

 아주 심각한 에러가 발생한 상태를  나타낸다.

ERROR 

 어떠한 요청을 처리하는 중 문제가 발생한 상태를 나타낸다. 

WARN

 프로그램의 실행에는 문제가 없지만, 

 향후 시스템 에러의 원인이 될 수 있는 경고성 메시지를 나타낸다. 

INFO

 어떠한 상태변경과 같은 정보성 메시지를 나타낸다. 

DEBUG

 개발시 디버그 용도로 사용하는 메시지를 나타낸다. 

TRACE 

 디버그 레벨이 너무 광범위한것을 해결하기 위해서 좀 더 상세한 이벤트를 나타낸다. 


P.S.)

인터넷에서 Log4j에 대해서 찾아보면 여러가지 글이 나오는데, 상당히 많은 글들이 .properties 파일을 이용한 설정방법이다. Log4j에 .properties를 사용하는 건 최악이다. 절대로 하지말자. (진지한 궁서체다.) 이제 .properties는 굉장히 옛날 방식이고 절대로 사용해서는 안되는 방식인데, 최근에 작성된 글들도 .properties를 가지고 이야기하고 있다. 최신 Log4j에서는 xml과 json을 이용한 설정만 지원하고 있다.  (필자는 .xml 이용)




- 출처http://addio3305.tistory.com/43

반응형

공유

댓글