Log4j
log
로그란?
: 상태가 변경되거나, 소프트웨어의 에러/동작 등 이벤트 등을 기록하는 것
로그 활용?
: 시스템에 문제가 발생할 때 원인 분석, 사용자 이용 행위 기록 분석 등에 사용된다.
log framework ?
- 모니터링해서 다양한 분산 처리 환경에 분산되어 있는 log를 수집한다.
- 대부분은 파일 형태로 만들어 관리한다.
- log는 애플리케이션의 동작에 대해 구체적으로 설명할 수 있어야 한다.
- log 수집 시, 기존 성능에 영향을 주지 않아야 한다. (로그인 한다고 해서 성능에 저하가 있어서는 안되는 것처럼)
- log 수집에 있어서 어느 환경에서도 유연하게 수집 할 수 있어야 한다.
이런 기능을 제공해주는 것을 log 프레임 워크라고 한다.
각 프로그램마다 고유의 log 프레임 워크가 있는데,
JAVA 같은 경우는 프레임 워크가 다양하다. (Log4j, SLF4J, logback, ...)
* SLF4J (Simple Logging Facade for Java)
: Log4j나 logback에 접근할 수 있는 API로써 같이 사용한다.
직접 Log4j를 사용하는 것이 아니라 SLF4J를 통해서 Log4j를 사용한다고 보면 된다.
Facade(건물의 외관은 볼 수 있지만, 내부는 볼 수 없는 것처럼) 패턴이 적용된 것이다.
로그인 관련 프레임 워크에 쉽게 접근할 수 있도록 앞단에 있는 인터페이스라고 생각하면 된다.
"Application에서 SLF4J 인터페이스 호출 -> SLF4J 내부에서 -> Log4j 를 사용한다."
- 이렇게 사용하면 Log4j를 사용하다가 logback으로 log프레임 워크를 변경해야 된다면 쉽게 바꿀 수 있다. - 실제 사용자가 쓰던 코드에는 변화가 없다.
1. Log4j 라이브러리 다운 받기
https://mvnrepository.com/search?q=log4j
Maven repository에서 log4j 검색
▲ core와 API가 함께 달려오는 Binding 버전 다운로드
https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-slf4j-impl/2.17.1
버전은 가장 최신 버전인 2.17.1 버전 다운로드
클립보드에 복사하고 mybatis 프로젝트의 pom.xml 파일에 추가
(log4j version2 이 log4j 2.x~~ 로 시작하는 버전들이다. 1.x~~ 버전은 log4 version 1. 이다.)
<!-- log4j, loggin 관련 라이브러리 -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-slf4j-impl</artifactId>
<version>2.17.1</version>
<scope>test</scope>
</dependency>
작성 후, Alt + F5 로 Maven Project 새로 업데이트하고 나서
Pakage Explorer에서 Maven Dependencies를 보면 이렇게 log4j 관련 jar 파일이 추가된 것을 확인할 수 있다.
2. xml 파일(설정 파일) 만들기
https://logging.apache.org/log4j/2.x/manual/configuration.html
새롭게 XML 파일을 하나 만든다.
반드시 log4j2.xml 파일 이름으로 만들어야 한다.
그래야 프로젝트 실행할 때, 이 파일을 읽을 수 있다.
▼ 기본 구조
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="INFO">
<Appenders>
</Appenders>
<Loggers>
</Loggers>
</Configuration>
▼ 완성 xml
◆ <Configuration> : log4j 최상단의 설정 태그
◆<Configuration>의 STATUS 속성 : LOG 설정 파일을 읽어 갈 때, 발생하는 로그들을 찍어주는 레벨
DEBUG -> 설정 파일을 실제로 읽어가면서 발생하는 로그들을 출력
INFO -> 로그들이 출력되지 않는다.
-> 개발할 때는 대부분 DEBUG 으로 해놓고 개발하면서 필요한 로그들을 확인해가면서 개발한다.
-> 실제 배포할 때는 INFO로 설정한다.
◆ <Appenders> : log 출력 위치를 지정하는 태그(콘솔, 파일, OutputStream, ...)
◇ <Console> : sts 안에 console에서 출력하겠다.
◇ <PatternLayout> : 로그 출력 포맷 지정
◇ <File> : mybatis > target 최상위에 fileName 속성에 지정한대로 test.log 파일이 생성된 것을 확인할 수 있다.
◆ <Root> : 일반적인 로그 정책을 의미
일반적인 로그 정책
** FATAL > ERROR > WARN > INFO > DEBUG > TRACE > ALL **
1. FATAL : 개발자가 직접 하는게 아니라 시스템에서 심각한 문제가 발생할 경우 출력됨, 애플리케이션 동작이 불가능할 경우 알려주기 위해서 출력
2. ERROR : 일반적으로 실행하다가 혹은 요청 처리 중에 runtime error나 exception 등 을 알려주기 위해 출력
3. WARN : 경고, 에러는 아니지만 개발 시 주의해야 할 사항. 문제가 될 수도 있어서 향후 시스템 에러의 원인이 될 수 있을 때 출력
4. INFO : 일반 적인 정보(사용자의 시스템 이용 행위, 상태 값이 어떻게 바뀌는 지 등)를 출력
-> 개발하면서 보던 정보는 필요 없을 경우에 INFO로 찍고 서버에 배포
5. DEBUG : 개발하면서 INFO보다 조금 더 상세하게 확인할 수 있는 정보를 얻기 위해 출력
6. TRACE : DEBUG보다 상세한 내용 출력(에러 발생의 경로 추적 등)
7. ALL : 전부 출력
- 레벨을 지정하면, 본인 포함해서 자기보다 높은 레벨의 로그들은 모두 콘솔에 출력한다.
- 지정한 레벨 등급 이상의 로그만 출력되도록 할 수 있다.
- "X로그는 어느 상황에서 찍히면 좋겠다" 라고 해서 개발자가 판단해서 해당하는 레벨로 log 찍어본다.
이 설정된 것에 따라서 정보들을 출력할 수 있다.
기존 test.log 파일 지우고
이렇게 폴더 생성 및 경로 지정을 입력하고 test 실행해보면 log 폴더가 따로 생성된 것을 볼 수 있다.
3. 내가 직접 지정한 log 출력해보기
3-1. pom.xml에서 <scope> test </scope> 부분 지우기
3-2. App.java
간단하게 로그 찍어보기
logger 객체(<- import org.slf4j.Logger; ) 사용해서 로그를 찍을 수 있다.
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
// 1번 방법
public class App{
private static Logger log = LoggerFactory.getLogger(App.class);
public static void main(String[] args){
log.info("로깅 테스트");
}
}
// 2번 방법(Lombok 라이브러리가 추가되어있다고 가정할 경우)
// outline에 logger가 static final로 자동으로 추가된다.
@Slf4j
public class App{
public static void main(String[] args){
log.info("로깅 테스트");
}
}
===================================[CONSOLE]===================================
[INFO] 2022-01-10 22:07:12.33 [main] 패키지명(지정한 레벨까지만).App main - 로깅 테스트 -
의미
[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{3} %M -%msg - %n
%level : 로그 정책 레벨
%d{형식} : 날짜{날짜의 형식}
%t : 스레드의 이름
%c{단계} : 패키지{최대5개단계까지}
%M : 실행하고 있는 메소드 이름
%msg : 로그 메세지
%n : 줄바꿈(개행)
총 정리
-
'Study > Setting & Tip' 카테고리의 다른 글
DAY 152. Spring에 Mybatis 연동하기 (0) | 2022.01.18 |
---|---|
DAY 134. Maven 설치 (0) | 2021.12.30 |
DAY 133. STS(Spring Tool Suite 3) 초기 환경 설정 (0) | 2021.12.29 |
DAY 110. 이클립스에서 JSP 라이브러리 추가한 탬플릿 만들기 (0) | 2021.12.06 |
DAY 108. JSP Apache Taglibs 이클립스에 추가하기 (0) | 2021.12.04 |