[JAVA] log4j, slf4j 설정

Yuri Lee·2024년 6월 18일
0

JAVA

목록 보기
13/16

개발 배경
전자정부프레임워크 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
유리

1개의 댓글

comment-user-thumbnail
2024년 6월 18일

좋은정보 감사합니다

답글 달기