안녕하세요. 명월입니다.
이 글은 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)에 대한 글이었습니다.
궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.
'Development note > Java' 카테고리의 다른 글
[Java] Servlet 환경 - 파일 업로드(프로그래스바로 파일 업로드 상태를 표시하는 방법) (0) | 2019.10.27 |
---|---|
[Java] Tomcat 서버에서 소켓 서버를 만드는 방법 (0) | 2019.10.20 |
[Java] 서블릿 환경에서 현재 실행 디렉토리 가져오기 (0) | 2019.10.16 |
[Java] 알고리즘 - 지하철 노드 탐색 (연결리스트, 트리 탐색 응용) (6) | 2019.09.24 |
[Java] 숫자 포맷(돈 표시 및 소수점 이하 표시) (0) | 2019.08.19 |
[Java] XML를 Xpath를 이용하여 데이터를 취득하는 방법(XPathFactory) (0) | 2019.08.08 |
[Java] Jsoup를 이용해서 XML파일(HTML)을 다루는 방법 (0) | 2019.08.07 |
[Java] 직렬화(Serializable) (2) | 2019.07.16 |