[자바]Log4j

20220422_180516

mvn Repository에서 1.2 jar중 가장 많은 버전을 dependency 추가해준다.

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
  <groupId>log4j</groupId>
  <artifactId>log4j</artifactId>
  <version>1.2.17</version>
</dependency>

https://logging.apache.org/log4j/1.2/manual

Ex01.java


import org.apache.log4j.Logger;

public class Ex01 {

	static Logger log = Logger.getLogger("com.bit.Ex01");

	//레벨 정도 : trace < debug < info < warn < error < fatal
	//log4j.properies생성 후 여기서 만 조절을 해줘도 레벨을 변경할 떄마다 자바 코드를 바꾸지 않아도 변경이 가능해진다.
	public static void main(String[] args) {

		String msg = "hello world";

		//레벨 6개
		log.trace("트레이스 메시지");
		log.debug("디버그 모드 메시지");
		log.info("정보모드 메시지");

		log.warn("경고 메시지");
		log.error("에러모드 메시지");
		log.fatal("심각모드 메시지");
		System.out.println("msg");
		Ex02 ex02 = new Ex02();
		ex02.func01();
	}
}


Ex02.Java

package com.bit;

import org.apache.log4j.Logger;

public class Ex02 {

	static Logger log = Logger.getLogger("com.bit.Ex02");

	//레벨 정도 : trace < debug < info < warn < error < fatal
	//log4j.properies생성 후 여기서 만 조절을 해줘도 레벨을 변경할 떄마다 자바 코드를 바꾸지 않아도 변경이 가능해진다.
	public void func01() {

		String msg = "hello world";

		//레벨 6개
		log.trace("트레이스 메시지");
		log.debug("디버그 모드 메시지");
		log.info("정보모드 메시지");

		log.warn("경고 메시지");
		log.error("에러모드 메시지");
		log.fatal("심각모드 메시지");
		System.out.println("msg");
	}
}

log4j.properies(직접 생성)

# Set root logger level to DEBUG and its only appender to A1.
#log4j.rootLogger=DEBUG, A1
# log4j.rootLogger=Warn, A1
#여기서 레벨 조절

# A1 is set to be a ConsoleAppender.
# log4j.appender.A1=org.apache.log4j.ConsoleAppender

# A1 uses PatternLayout.
# log4j.appender.A1.layout=org.apache.log4j.PatternLayout


# log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n



################


#log4j.rootLogger=DEBUG, A1
#log4j.appender.A1=org.apache.log4j.ConsoleAppender
#log4j.appender.A1.layout=org.apache.log4j.PatternLayout

# Print the date in ISO 8601 format
#log4j.appender.A1.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

# Print only messages of level WARN or above in the package com.foo.
#log4j.logger.com.foo=WARN



################

log4j.rootLogger=debug, stdout, R

#log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller's file name and line number.
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) - %m%n

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=D:\WebCash\Web\example\example.log
# 이렇게 주면 콘솔에 메시지를 주는게 아닌 따로 저장소에 로그를 저장한다.
# 그리고 콘솔에 출력 안하고 파일에만 출력하고 싶으면 위의
#log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
#이 두줄을 지우면 된다.

log4j.appender.R.MaxFileSize=100KB
# Keep one backup file
log4j.appender.R.MaxBackupIndex=1

log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%n

참고로 log 파일 설정 시

D:\Web\example

이런 식으로 \가 example.log가 제대로 설정 되게 하려면 \ 가 아니라 /인 그냥 슬래시를 써줘야 제대로 나왔다.

그 외의 log4j도 다양한 패턴은


FATAL : 가장 크리티컬한 에러가 일어 났을 때 사용합니다.
ERROR : 일반 에러가 일어 났을 때 사용합니다.
WARN : 에러는 아니지만 주의할 필요가 있을 때 사용합니다.
INFO : 일반 정보를 나타낼 때 사용합니다.
DEbUG : 일반 정보를 상세히 나타낼 때 사용합니다.

%p debug, info, warn, error, fatal 등의 priority 가 출력된다.
%m 로그내용이 출력됩니다
%d 로깅 이벤트가 발생한 시간을 기록합니다.
포맷은 %d{HH:mm:ss, SSS}, %d{yyyy MMM dd HH:mm:ss, SSS}같은 형태로 사용하며 SimpleDateFormat에 따른 포맷팅을 하면 된다
%t 로그이벤트가 발생된 쓰레드의 이름을 출력합니다.
%% % 표시를 출력하기 위해 사용한다.
%n 플랫폼 종속적인 개행문자가 출력된다. \r\n 또는 \n 일것이다.
%c 카테고리를 표시합니다
예) 카테고리가 a.b.c 처럼 되어있다면 %c{2}는 b.c가 출력됩니다.
%C 클래스명을 포시합니다.
예)클래스구조가 org.apache.xyz.SomeClass 처럼 되어있다면 %C{2}는 xyz.SomeClass 가 출력됩니다
%F 로깅이 발생한 프로그램 파일명을 나타냅니다.
%l 로깅이 발생한 caller의 정보를 나타냅니다
%L 로깅이 발생한 caller의 라인수를 나타냅니다
%M 로깅이 발생한 method 이름을 나타냅니다.
%r 어플리케이션 시작 이후 부터 로깅이 발생한 시점의 시간(milliseconds)
%X 로깅이 발생한 thread와 관련된 MDC(mapped diagnostic context)를 출력합니다.
%x 로깅이 발생한 thread와 관련된 NDC(nested diagnostic context)를 출력합니다.

최상위 카테고리에 INFO로 레벨 설정 및 appender로 stdout, rolling을 정의

log4j.rootLogger=DEBUG, stdout, rolling

stdout 어펜더는 콘솔에 뿌리겠다는 정의

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

stdout 어펜더는 patternlayout을 사용하겠다는 정의

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

패턴은 다음과 같이 포맷팅 하겠다는 것을 정의

log4j.appender.stdout.layout.ConversionPattern=[%d{yyyy\ub144 MM\uc6d4 dd\uc77c HH:mm(ss)}] %-5p [%t] %-17c{2} (%13F:%L) %3x –>\ub0b4\uc6a9 : %m%n

역시나 rolling 어펜더는 파일로 처리한다라고 정의

log4j.appender.rolling=org.apache.log4j.DailyRollingFileAppender

로그 파일 이름은 output.log

log4j.appender.rolling.File=output.log

true면 톰캣을 내렸다 올려도 파일이 리셋되지 않습니다.

log4j.appender.rolling.Append=true

파일 최대 사이즈는 500KB로 설정

log4j.appender.rolling.DatePattern=’.’yyyy-MM-dd

역시나 rolling 어펜더는 패턴 레이아웃을 사용하겠다고 정의

log4j.appender.rolling.layout=org.apache.log4j.PatternLayout

rolling 어펜더는 패턴 레이아웃 포맷

log4j.appender.rolling.layout.ConversionPattern=[%d{yyyy\ub144 MM\uc6d4 dd\uc77c HH:mm(ss)}] %-5p [%t] %-17c{2} (%13F:%L) %3x –>\ub0b4\uc6a9 : %m%n

출처: https://jdkblog.tistory.com/122 [JDK’s blog]







© 2021.03. by yacho

Powered by github