Log4j 다중 파일에 다른 레벨 로그 정보 저장

실제 프로젝트 개발에서 때때로 우리는 서로 다른 등급의 로그 정보를 서로 다른 파일에 기록해야 한다. 예를 들어 등급이 INFO인 로그는 한 파일에 저장하고 등급이 ERROR인 로그는 다른 파일에 저장하기를 원한다.이렇게 하면 프로젝트의 어떤 기능에 문제가 생기면 우리는 ERROR 로그 정보를 저장한 파일만 볼 수 있다.
이 때 Log4j에서 자체적으로 가지고 있는 파일 생성 정책 유형은 우리의 요구를 만족시킬 수 없습니다. 우리는 관련 클래스를 계승하고 해당하는 방법을 덮어쓰는 클래스를 작성해야 합니다. 다음은 Daily RollingFile Appender를 예로 들겠습니다.
log4j.properties
log4j.rootLogger=INFO,stdout,infoTarget,errorTarget

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss}|%p|%C|%M|%L|%m%n

log4j.appender.infoTarget=com.zws.log.MyDailyRollingFileAppender
log4j.appender.infoTarget.layout=org.apache.log4j.PatternLayout
log4j.appender.infoTarget.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss}|%p|%C|%M|%L|%m%n
log4j.appender.infoTarget.datePattern='.'yyyy-MM-dd
log4j.appender.infoTarget.Threshold = INFO
log4j.appender.infoTarget.append=true
log4j.appender.infoTarget.File=${catalina.home}/logs/app/itc/info.log

log4j.appender.errorTarget=com.zws.log.MyDailyRollingFileAppender
log4j.appender.errorTarget.layout=org.apache.log4j.PatternLayout  
log4j.appender.errorTarget.layout.ConversionPattern=%d{yyyy-MM-dd HH\:mm\:ss}|%p|%C|%M|%L|%m%n
log4j.appender.errorTarget.datePattern='.'yyyy-MM-dd
log4j.appender.errorTarget.Threshold = ERROR
log4j.appender.errorTarget.append=true
log4j.appender.errorTarget.File=${catalina.home}/logs/app/error.log

MyDailyRollingFileAppender.java
package com.zws.log;

import org.apache.log4j.DailyRollingFileAppender;
import org.apache.log4j.Priority;
/**
 *  ERROR 
 * @author wensh.zhu
 *
 */
public class MyDailyRollingFileAppender extends DailyRollingFileAppender {
	@Override
	public boolean isAsSevereAsThreshold(Priority priority) {
		String level = priority.toString();
		if (level.equalsIgnoreCase("ERROR")) {
		        //this.getThreshold() Threshold 
			return this.getThreshold().equals(priority);
		}
		return super.isAsSevereAsThreshold(priority);
	}
}

여기에는 두 가지 주의해야 할 점이 있는데, 첫 번째는log4j이다.properties 파일에log4j.appender.infoTarget.Threshold 속성은 반드시 지정해야 합니다. 속성 값은 등급(INFO, ERROR 등)입니다. 뒤에 이 속성으로 파일을 쓸 것인지를 판단해야 합니다. 두 번째는 클래스 My Daily Rolling File Appender가 Daily Rolling File Appender를 계승하고 is Assevere Asthreshold 방법을 다시 썼습니다. 이 방법은 등급이 Threshold 속성 값인 로그 정보를 로그에 쓸 것인지를 결정합니다.이 예에서 오류 로그에 error 방법을 사용할 때, 이 로그 정보는 Threshold 속성 값이 ERROR인 목적지 파일에 기록됩니다. 즉, ${catalina.home}/logs/app/error입니다.로그 파일.

좋은 웹페이지 즐겨찾기