[JAVA] log4j, slf4j 설정

Yuri Lee·2024년 6월 18일
0

JAVA

목록 보기
13/16
post-custom-banner

개발 배경
전자정부프레임워크 3.5.1
빌드도구 Apache Ant

slf4j API를 이용한 log4j 설정을 통해 로그파일을 남기는 방법에 대해 기록해본다.

slf4j 란?

우선, slf4j는 다양한 로깅 프레임워크(log4j, logback 등)를 일관된 방식으로 사용할 수 있게 해주는 인터페이스이다. slf4j는 추상 로깅 프레임워크이기 때문에 단독으로 사용하지 않는다.

slf4j를 사용함으로써

  • 코드를 변경하지 않고도 로깅프레임워크를 쉽게 교체할 수 있고
  • 일관된 로깅 API를 제공하여 복잡성을 줄여주고 유지보수성을 높여준다.

log4j 설정법

1. 필요 라이브러리 다운로드

  • slf4j-api.jar
  • slf4j-log4j12.jar
    : slf4j를 통해 log4j를 사용하려면 반드시 필요! 이게 없으면 java 소스에 slf4j가 아닌 log4j를 통해 로그를 남겨야하기에 다른 로깅프레임워크로 전환시 많은 소스를 변경해야해서 유지보수의 어려움 발생.
  • log4j.jar

다운로드 받은 라이브러리를 lib폴더 안에 위치시킴.

2. log4j.properties 파일 작성

classes 경로 아래에 properties 파일을 작성.

log4j.rootLogger=DEBUG, stdout, file

# Direct log messages to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.DailyRollingFileAppender # 하루를 기준으로 로그가 쌓임
log4j.appender.file.File=logs/app.log
log4j.appender.file.DatePattern='.'yyyy-MM-dd  # 롤링 파일명에 날짜 포함
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

참고로 파일명에 지정한 날짜는 자정이 지나야 app.log.2024-01-01 이런 형태로 생성된다.
그 전에는 app.log로 생성됨.

로그파일 이름을 app.2024-01-01.log로 변경하고 싶어서 검색해본 결과
1. log4j의 버전을 1->2로 업그레이드 후 CustomAppender 클래스를 작성해서 properties 파일에 appender를 추가 설정 -> 번거롭다
2. 더 좋은 방법은 log4j를 logback으로 전환하여 사용하는 것이다.

3. java 클래스 로그 추가

//log4j가 아닌 slf4j API클래스를 사용함으로써 다른 로깅프레임워크로 전환이 쉽다. 
//logback으로 변경시에도 java 소스는 수정하지 않아도 됨.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class MyApp {
    private static final Logger logger = LoggerFactory.getLogger(MyApp.class);
       public static void main(String[] args) {
          logger.info("This is an info message");
          logger.debug("This is a debug message");
          logger.error("This is an error message");
       }
}

4. Ant 빌드 파일 작성

build.xml 에 추가한 라이브러리를 정의한다.

//예시
<target name="run">
  <javac srcdir="${src.dir}" destdir="${temp.dir}" 
        classpath="${lib.dir}/slf4j-api.jar:${lib.dir}/slf4j-log4j12.jar:${lib.dir}/log4j.jar" 
        includes="**/*.jar" listfiles="on" deprecation="true" debug="on"/>
</target>

5. 빌드 및 실행

터미널에서 해당 프로젝트의 빌드.
was 컨테이너 리스타트 후 실행 시 로그파일이 생성된 것을 확인.

profile
유리
post-custom-banner

1개의 댓글

comment-user-thumbnail
2024년 6월 18일

좋은정보 감사합니다

답글 달기