[Spring] log4j 로그를 효율적으로 사용
- 웹/Spring
- 2021. 8. 6.
Log4j
- 자바에서 로그를 효율적으로 남기기 위한 라이브러리
- 디버그, 로깅등의 용도로 사용된다.
Log4j의 구조
Logger
로그 메세지를 작성, Appender에게 전달한다.
Appender
로그를 출력하는 위치 결정(콘솔, 파일, DB 등)
Layout
Appender로 로그 생성전에 메세지를 어떤 형식으로 기록할지 설정한다.
※ 주의
main과 test 안에 resources폴더 내부에 log4j.xml로 위의 설정을 변경할 수 있다.
java소스가 test와 main인지 구별해서 설정해야 한다.
Log4j 레벨
로그 레벨 | 설명 |
OFF | 로그를 끈다. |
FATAL | 치명적 에러 |
ERROR | 에러 |
WARN | 주의 |
INFO | 일반 정보 |
DEBUG | 디버깅 정보 |
TRACE | 더 자세한 디버깅 정보 |
ALL | 모든 로그를 보여줌 |
아래서부터 오름차순으로 레벨을 가지며 출력 레벨 설정에 따라 설정레벨 이상의 로그가 출력된다.
예를 들어 레벨 설정을 WARN이라고 설정 하면 WARN, ERROR, FATAL만 출력 된다.
Log4j설정
pom.xml에서 라이브러리 추가 (기본적으로 존재하고 버전을 바꾸는게 아니면 안해도 된다.)
1
2
3
4
5
|
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.13.3</version>
</dependency>
|
cs |
log4j.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
</layout>
</appender>
<!-- Application Loggers -->
<logger name="com.tody.lovely" >
<level value="info" />
</logger>
<!-- 3rdparty Loggers -->
<logger name="org.springframework.core">
<level value="info" />
</logger>
<logger name="org.springframework.beans">
<level value="info" />
</logger>
<logger name="org.springframework.context">
<level value="info" />
</logger>
<logger name="org.springframework.web">
<level value="info" />
</logger>
<!-- Root Logger -->
<root>
<priority value="warn" />
<appender-ref ref="console" />
</root>
</log4j:configuration>
|
cs |
log4j.xml의 기본값
Appender 설정
(콘솔)
1
2
3
4
5
6
7
|
<!-- Appenders -->
<appender name="console" class="org.apache.log4j.ConsoleAppender">
<param name="Target" value="System.out" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
</layout>
</appender>
|
cs |
<appender>
name : appender 이름 (나중에 logger에서 사용)
class : 출력할 형식에 대한 값
<param>
여러가지 param을 설정할 수 있다. 설정에 대한 변수명 이다.
name : 변수명
value : 값
<layout>
로그를 출력할 형태를 설정할 수 있다. PatternLayout을 많이 사용한다.
내부의 <param>태그를 이용하여 패턴을 원하는 형식으로 바꿀 수 있다.
Appender 설정 (파일)
로그는 기본적으로 콘솔로 찍히지만 로그 내용을 파일로 저장할 수 있다.
1
2
3
4
5
6
|
<appender name="rock_log" class="org.apache.log4j.FileAppender">
<param name="file" value="./note/log/rock.log"/>
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%-5p: %c - %m%n" />
</layout>
</appender>
|
cs |
<param>
name="file" : 저장할 파일의 경로를 작성할 때 param태그에 name속성을 file로 해야 한다.
value="path(경로)" : 저장할 파일의 경로
Logger 설정
1
2
3
4
|
<logger name="com.mycompany.model">
<level value="all" />
<appender-ref ref="rock_log"/>
</logger>
|
cs |
<logger>
로그의 레벨과 설정한 appender를 적용할 영역을 지정한다.
<level>
로그 레벨을 설정한다.
<appender-ref>
위에서 작성한 Appender를 참조한다.
즉 <appender>에서 작성한 내용(출력방법, 레이아웃, 패턴 설정 등)을 가지고 <logger>에서 그 설정된 내용을 가져다 사용한 다.
※ 만약 여기서 설정되지 않는 영역에서 Log4j를 사용할 경우 아래의 <root>설정을 따른다.
1
2
3
4
|
<root>
<priority value="info" />
<appender-ref ref="console" />
</root>
|
cs |
실행 테스트
위의 xml 설정대로 마무리를 했다면 자바코드에서 확인할 수 있다.
import org.apache.log4j.Logger;
import org.junit.Test;
public class LogTest {
// Logger 인스턴스 생성
Logger log = Logger.getLogger(this.getClass());
Logger log1 = Logger.getLogger("로그 찍힐 이름");
@Test
public void test() {
// log.level(message)
log.info(this.getClass());
log1.info(log1.getName());
}
}
1. Logger.getLogger()에는 자신클래스, 혹은 원하는 문자열로 매개변수를 넣어서 생성한다.
2. log.level(message)를 넣어주면 log4j.xml에서 설정해 놓은 방식대로 로그가 출력된다.
결과
INFO : com.mycompany.service.LogTest - class com.mycompany.service.LogTest INFO : 로그 찍힐 이름 - 로그 찍힐 이름 |
'웹 > Spring' 카테고리의 다른 글
[Spring] Controller 컨트롤러의 파라미터 수집기능 (0) | 2021.08.10 |
---|---|
[Spring] Controller 컨트롤러 #RequestMapping (0) | 2021.08.09 |
[Spring] lombok - VO 클래스를 간단하게 (설치시 에러해결) (0) | 2021.08.05 |
[Spring] JUnit5 반복 테스트 (0) | 2021.08.04 |
[Spring] JUnit4 단위 테스트 (0) | 2021.08.03 |