JAVA의 로그출력 방법에는 여러가지가 있지만 log4j라이브러리를 사용하여 관리하는 방법을 알아보자.


◆ Log4j 사용법


1. log4j 다운로드

http://logging.apache.org/log4j/1.2/ 접속하여 zip파일을 다운받는다. 해당 폴더의 log4j-1.2.17.jar 파일 준비


2. 라이브러리 추가

아래 두 가지 방법으로 모두 추가

  • WEB-INF/lib 폴더에 jar파일을 추가
  • 프로젝트 우클릭 -> Configure build path -> Add External JARs -> jar파일 추가


3. log4j.properties파일 작성

src하위 경로나, WEB-INF하위 경로로 일반 파일로 작성하며 이름은 log4j.properties로 한다. 아래와 같이 작성

# Root logger option
 
# Log4j Setting file
# 첫 번째 인자 DEBUG: 로그 레벨을 의미하며 해당 로그레벨 이상만 출력하겠다는 의미
# 로그레벨 : TRACE < DEBUG < INFO < WARN < ERROR < FATAL
# 두 번째 인자 console. R : appender뒤에 붙일 이름으로 사용할 키워드 (그냥 변수라 보면됨)
# appender? : 로깅 메시지를 파일로 보낼 것인지, 콘솔로 출력할 것인지를 구분하기 위한 변수
log4j.rootLogger=DEBUG, console, R
 
# Daily file log
# 위에서 선언한 R이라는 이름을 로그 파일 세팅변수로 선언, 파일에 남길 로그셋팅을 할 수 있다.
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
# 로그를 남길 경로를 지정
log4j.appender.R.File=C:/Users/Desktop/web.log
# 로그 파일은 하루가 지날 시 백업파일을 생성하는데 로그 파일 뒤에 붙일 파일명을 설정 ex) web.log.2019-01-01
log4j.appender.R.DatePattern='.'yyyy-MM-dd
# 로그 메시지를 어떻게 보여줄 지에 대한 레이아웃 설정( HTMLLayout, PatternLayout, XMLLayout, SimpleLayout ... ) 패턴레이아웃이 주로 쓰임
log4j.appender.R.layout=org.apache.log4j.PatternLayout
# 로그 출력 레이아웃을 설정
log4j.appender.R.layout.ConversionPattern=[%d{HH:mm:ss}][%-5p](%F:%L)-%m%n
 
# Console log
# console이라는 이름을 콘솔에 출력할 로그 세팅변수로 선언
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%d{HH:mm:ss}][%-5p](%F:%L)-%m%n
# 로그 메시지 버퍼 사용유무(default: true)
log4j.appender.console.ImmediateFlush=true


4 properties 경로설정

  • src 경로 아래에 있을때는 properties위치를 잡아줄 필요가 없음
  • WEB-INF아래에 있을때는 web.xml에 아래 코드를 추가
<!-- Log4j 설정 -->
<context-param>
	<param-name>log4jConfigLocation</param-name>
	<param-value>/WEB-INF/config/log4j.properties</param-value>
</context-param>

<listener>
	<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>


5. 로그 출력

로그 객체 생성에는 두 가지 방법이 있다. 메서드는 중요도에 따라 사용하면 된다
( 위 properties 로그레벨 참고 )

@Controller
public class LogTest {
	@RequestMapping("/test")
	public String test(){
		Logger logger = Logger.getRootLogger();
		/*Log logger = LogFactory.getLog(this.getClass());*/
		logger.debug("디버그");
		logger.info("인포");
		return "test.jsp";
	}
}

// Logger logger = Logger.getRootLogger(); -> build path 설정 필요
// Log logger = LogFactory.getLog(this.getClass()) -> lib폴더에 jar필요