개발 배경
전자정부프레임워크 3.5.1
빌드도구 Apache Ant
slf4j API를 이용한 log4j 설정을 통해 로그파일을 남기는 방법에 대해 기록해본다.
우선, slf4j는 다양한 로깅 프레임워크(log4j, logback 등)를 일관된 방식으로 사용할 수 있게 해주는 인터페이스이다. slf4j는 추상 로깅 프레임워크이기 때문에 단독으로 사용하지 않는다.
slf4j를 사용함으로써
- 코드를 변경하지 않고도 로깅프레임워크를 쉽게 교체할 수 있고
- 일관된 로깅 API를 제공하여 복잡성을 줄여주고 유지보수성을 높여준다.
다운로드 받은 라이브러리를 lib폴더 안에 위치시킴.
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으로 전환하여 사용하는 것이다.
//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");
}
}
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>
터미널에서 해당 프로젝트의 빌드.
was 컨테이너 리스타트 후 실행 시 로그파일이 생성된 것을 확인.
좋은정보 감사합니다