[Java] 로그 라이브러리(log4j)
안녕하세요. 명월입니다.
이 글은 Java에서 사용하는 로그 라이브러리(log4j)에 대한 글입니다.
이 전에 제가 C#에서 사용하는 log4net에 대해 소개한 적이 있습니다.
사실 이 log4net과 log4j는 같은 라이브러리인데 사용하는 언어가 C#이냐 Java이냐의 차이만 있을 뿐입니다. 전의 글에서도 로그에 대해 간략하게 설명했었는데 정리해서 다시 설명하겠습니다.
로그라는 것은 프로그램을 개발하는 데 있어서 데이터 추적과 호출된 클래스와 함수등을 조사하기 위해 사용하는 라이브러리입니다.
보통 개발을 할 때는 IDE툴을 이용해서 디버깅을 하면 데이터 추적을 할 수 있지만 개발이 끝나고 나서 프로그램이 컴파일 되고 Production에 릴리즈가 되면 데이터 추적하기가 쉽지 않습니다.
그러나 완벽한 프로그램이라면 문제가 없겠지만 인간이 만든 프로그램이기 때문에 버그가 발생하고 그 버그로 인해 잘못된 연산을 하거나 에러가 발생합니다. 에러가 발생할 때는 데이터를 추적할 수 있어야 하는데..
그 때, 추적을 할 수 있는 여러 방법 중에 가장 간편한 방법 중에 하나로 로그를 남기고 추적하는 방법입니다.
그 외에 로그는 꼭 에러 추적만이 아닌 여러 행동 패턴을 남기고, 또는 유저의 행동등을 추적하여 여러 통계자료로도 활용할 수 있습니다.
그럼 Java에서 Log4j를 사용하기 위해서는 maven를 통해서 log4j를 다운 받아야 합니다.
import java.io.FileNotFoundException;
import java.io.IOException;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.core.config.xml.XmlConfigurationFactory;
public class Main {
public static void main(String[] args) throws FileNotFoundException, IOException {
// log4j.xml 파일 설정
System.setProperty(XmlConfigurationFactory.CONFIGURATION_FILE_PROPERTY,"d:\\log4j.xml");
Logger logger = (Logger) LogManager.getLogger(Main.class);
// 로그 레벨 순위 입니다.
logger.fatal("fatal log");
logger.error("error log");
logger.warn("warn log");
logger.info("info log");
logger.debug("debug log");
}
}
<?xml version="1.0" encoding="UTF-8"?>
<configuration status="WARN">
<appenders>
<!-- 콘솔 로그 설정 -->
<Console name="console" target="SYSTEM_OUT">
<PatternLayout pattern="%d [%t] %-5p %c - %m%n" />
</Console>
<!-- 파일 로그 설정 -->
<RollingFile name="file" fileName="d:\logs\all.log" filePattern="./logs/all.%i.%d{yyyy-MM-dd}.log">
<PatternLayout pattern="%d [%t] %-5p %c - %m%n" />
<Policies>
<SizeBasedTriggeringPolicy size="10MB" />
</Policies>
<DefaultRolloverStrategy max="1000" fileIndex="min" />
</RollingFile>
</appenders>
<!-- 로그 레벨 설정 -->
<loggers>
<root level="ALL">
<appender-ref ref="console" />
<appender-ref ref="file" />
</root>
</loggers>
</configuration>
log4j의 경우는 log4net과 다르게 소스상에서 설정은 없는 것 같습니다. 원래는 있는데 제가 찾지를 못하는 것일 수도 있습니다.
링크 - https://logging.apache.org/log4j/2.0/manual/api.html
저의 경우는 property설정으로 log4j파일을 지정했습니다만, 사실 웹 프로젝트라면 resource 폴더에 넣고 별도의 설정이 없이도 xml를 찾아 읽을 것 입니다.
그러니 log4j.xml 설정을 하기 위해 resource 경로 설정에 대해 신경 쓰지 않아도 될 것 같습니다.
그리고 xml 설정이 아니라 json 설정으로도 되는 듯 싶습니다. 그러나 개인적으로 환경설정 파일은 xml이 낫지 않을 까 싶네요. json은 편하긴 하지만 가독성이 좀 떨어져서...
여기까지 Java에서 사용하는 로그 라이브러리(log4j)에 대한 글이었습니다.
궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.