Logging
Intro
Log란 클라이언트의 요청정보, 응답정보, 에러가 발생했을때의 상황 등 서버의 역할로 어플리케이션을 개발 및 운영할때 발생하는 모든 상황에 대한 기록(log)행위를 의미한다.
개발자는 이러한 다양한 운영상의 Log정보를 통해 에러를 처리하고 서비스를 개선할 수 있으므로 Log를 기록하고 분석하는 행위는 정말 중요하다고 볼 수 있다.
이러한 중요성 때문에 Log를 관리하는 프레임워크는 굉장히 다양하지만, Spring Framework에서는 각종 log 프레임워크를 통합하여 관리하는 Slf4j모듈을 제공한다
Slf4j
SLF4J(Simple Logging Facade For Java) : 자바를 위한 간단한 로깅 추상체,
자바에는 로깅을 위한 다양한 라이브러리가 준비되어 있으나 스프링에서는 각 모듈을 통합하여 SLF4J한개의 모듈로만 개발이 가능하도록 구성되어 있다.
Slf4j방식으로 코드를 구현하면 실제로 배포될때는 의존성에 추가한 로깅프레임워크의 코드로 배포되어 작동한다
Slf4j에 필요한 의존성
MVC프로젝트 생성시 기본 로깅 의존성들이 자동으로 설치가 되어 있다.
필요하다면 properties에서 버전정보만 간단하게 수정하여 사용하면 된다.
slf4j는 기본 로깅 프레임워크로 log4j를 사용한다.
Slf4j 사용방법
Logger 객체 추가
Google을 통해 log4j사용방법을 검색해보면 아래와 같은 객체생성 방법을 통해 Logger객체를 만들고 log출력 메서드를 호출하는 것을 확인해 볼 수 있다.
위 코드의 경우 직접 Logger객체를 생성하고 사용할 클래스를 선택해야 하는 번거로움이 존재한다. 이를 편리하게 만든게
Lombok
의 @Slf4j
어노테이션이다
Logging Level과 Loggin용 메서드
slf4j에서는 정보를 단순히 출력하는 기능 뿐만 아니라 로그의 레벨을 여러 등급으로 나눠서 상황에 맞는 로그함수를 호출하도록 지원한다.
Logging Level
Logging Methods
프로젝트 생성후 위 메서드 실행시 error(), warn(),inf() 메서드의 내용만 출력되는것을 확인 할 수 있다. 이는 프로젝트의 log4j.xml에서 설정한 출력용 로그 레벨을 지정하는 코드와 연관이 있다.
위 코드는 MVC프로젝트 생성시 내장 log4j.xml에 대한 설정정보로
com.kh.test
패키지 아래의 클래스들에 대한 로그 레벨을info
등급으로 지정하고 있다.로그레벨을 info등급으로 설정하게되면 Logging Level이 info등급과 같거나 info등급보다 높은 경고성 메세지들이 출력된다.
로그의 등급이 존재할때의 장점은 개발단계의 어플리케이션에서 로그레벨을
debug
등급으로 설정하여 개발에 필요한 파라미터값, 리턴값등을 확인을 한 후 , 운영단계로 넘어갔을때 로그레벨만 info등급으로 살짝변경하면 출력문을 하나하나 수정할 필요 없이 운영에 필요한 정보성 메세지만 출력되도록 관리할 수 있다.
log4j의 태그들 분석
appender
출력매체에 로그를 출력해주는 객체
기본 appender객체는 console창에 로그를 출력하는 역할을 한다
출력패턴은
layout
안에ConversionPattern
의 value값으로 지정한다사용가능한 패턴은 정식 메뉴얼을 통해 확인해도 되고 자주사용되는 패턴은 하단 드랍다운메뉴를 확인하자
logger
패키지별 로그레벨을 정의하는 객체
3rd party(스프링모듈)의 로그레벨도 정의할 수 있다.
level태그 생략시 root의 level로 설정된다
root
최상위 로거 객체로 모든 로거의 공통설정을 정의한다.
priority : 로그의 기본 출력레벨을 설정한다. logger객체가 level을 지정하지 않은 경우 이 값이 자동으로 로그레벨로 지정된다.
appender-ref : root로거에 추가할 appender를 추가하는 태그. 여러 appender를 추가할 수 있다.
로그정보 파일로 기록하기
Daily Rolling FileAppender
일정 기간 단위로 로그정보를 File에 기록해주는 객체로 회사의 운영 로그를 기록해 두었다가 서비스내용 분석, 데이터 수집 , 에러정보 해결등 다양한 용도로 사용한다.
설정방법
1) appender객체 생성성
2) root-logger에 생성한 appender등록
Last updated