스프링 MVC

준비중..

스프링 MVC

스프링을 사용한 웹서비스 만들기

27 로그(log4j) 사용하기

# 로그(log4j) 사용하기 ## 목차 1. Log4J란? 2. 구성 요소 3. 로그 레벨 4. 핵심 클래스 5. 출력 형식 6. 사용 예 ## 1. Log4J란? Log4j는 Log for Java의 줄임말로 자바프로그램의 실행과적을 기록하는 도구이다. ## 2. 구성 요소 Log4j는 크게 3가지의 요소로 구성된다. + Logger: 로그 기록하고 Appender에 전달. + Appender: 로그를 파일, 콘솔, DB, 등의 위치에 출력. + Layout: 로그 출력 형식을 결정. ## 3. 로그 레벨 로그는 상태 및 목적에 따라 여러 단계(level)로 나누어진다. + FATAL: 어플리케이션 작동이 불가능한 상태. + ERROR: 요청을 처리할 수 없는 상태. + WARN: 처리 가능하지만, 위험성을 안고 있는 상태. + INFO: 정보성 메세지 확인. + DEBUG: 개발시 디버그를 위한 사용. + TRACE: DEBUG 레벨의 상세화 단계. 레벨은 `FATAL > ERROR > WARN > INFO > DEBUG > TRACE`의 순으로 정렬된다. (DEBUG 레벨로 했다면 INFO~FATAL까지 모두 logging) ## 4. 핵심 클래스 + ConsoleAppender: 콘솔에 로그 메시지 출력 + FileAppender: 파일에 로그 메시지 기록 + RollingFileAppender: 자동 백업 및 기록 + DailyRollingFileAppender: 일정 단위로 로그 기록 + JDBCAppender: DB에 로그를 출력 + SMTPAppender: 로그를 이메일로 전송 + NTEventAppender: 윈도우 시스템 이벤트 로그로 메시지 전송 ## 5. 출력 형식 | 포맷 | 역할 | |:-----:|:------| | %p | debug, info, warn, error, fatal 등의 priority 출력 | | %m | 로그내용 출력 | | %d | 로깅 이벤트가 발생한 시간을 출력 ex) %d{HH:mm:ss} | | %t | 로그이벤트가 발생된 쓰레드의 이름 출력 | | %F | 로깅이 발생한 프로그램 파일명 출력 | | %l | 로깅이 발생한 caller의 정보 출력 | | %L | 로깅이 발생한 caller의 라인수 출력 | | %M | 로깅이 발생한 method 이름 출력 | | % | % 표시 출력 | | %n | 플랫폼 종속적인 개행문자 출력 | | %c | 카테고리 출력 ex) 카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c 출력 | | %C | 클래스명 출력 ex) 클래스구조가 org.apache.xyz.SomeClass 처럼 되어있다면 %C{2}는 xyz.SomeClass 출력 | | %r | 어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds) 출력 | | %x | 로깅이 발생한 thread와 관련된 NDC(nested diagnostic context) 출력 | | %X | 로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context) 출력 | ## 6. 사용 예 라이브러리 추가(pom.xml) ``` <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> ``` 설정파일 작성(log4j.xml) ``` <?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.mycompany.sd"> <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> ```