java 사용자 정의 로그 출력 파일 (log4j 로그 파일 여러 개의 사용자 정의 로그 파일 출력)

4129 단어 log4j 로그 파일
log4j가 여러 개의 사용자 정의 로그 파일을 출력합니다. 만약에 실제 응용 프로그램에서 독립된 로그 파일을 출력해야 한다면 어떻게 해야 필요한 내용을 기존 로그에서 분리하여 단독 로그 파일을 형성할 수 있습니까?
먼저 흔히 볼 수 있는log4j를 보세요.properties 파일, 컨트롤러와test에 있습니다.로그 파일에 로그 기록:

log4j.rootLogger=DEBUG, stdout, logfile 

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n 

log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=log/test.log
log4j.appender.logfile.MaxFileSize=128MB
log4j.appender.logfile.MaxBackupIndex=3
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n

같은 클래스에서 여러 개의 로그 파일을 출력해야 합니까?사실 이치는 같다. 먼저 테스트에 있다.java에서 정의:

private static Log logger1 = LogFactory.getLog("mylogger1");

private static Log logger2 = LogFactory.getLog("mylogger2");

log4j.properties는 다음과 같이 구성됩니다.

log4j.logger.mylogger1=DEBUG,test1
log4j.appender.test1=org.apache.log4j.FileAppender
log4j.appender.test1.File=log/test1.log
log4j.appender.test1.layout=org.apache.log4j.PatternLayout
log4j.appender.test1.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n

log4j.logger.mylogger2=DEBUG,test2
log4j.appender.test2=org.apache.log4j.FileAppender
log4j.appender.test2.File=log/test2.log
log4j.appender.test2.layout=org.apache.log4j.PatternLayout
log4j.appender.test2.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n

다른 로그는 다른 logger를 사용해야 합니다. (예를 들어test1.log로 출력하는 것은logger1.info ("abc") 를 사용해야 합니다.
또 하나의 문제는 이 사용자 정의 로그는 기본적으로log4j로 출력된다는 것입니다.root Logger가 설정한 로그에 있는 로그를 지정한 로그로만 출력할 수 있는 방법은 무엇입니까?서두르지 마세요. 여기 스위치가 있어요.
log4j.additivity. mylogger1 = false
이것은 로그4j로 동시에 출력할 지 여부를 설정하는 데 사용됩니다.rootLogger가 설정한 로그에서false로 설정하면 다른 곳으로 출력되지 않습니다.
그러나 이런 방식에는 작은 결함이 있다. 그것은 인쇄된 로그의 클래스 이름이 mylogger나 mylogger2일 뿐이라는 것이다.
2 동적 설정 경로 만약에 프로그램이 필요로 하는 로그 경로가 끊임없이 변화가 필요하고 매번 설정 파일을 바꿀 수 없다면 환경 변수를 이용하여 해결할 수 있다.
log4j 구성은 다음과 같습니다.

log4j.rootLogger=DEBUG,INFOLOG,DEBUGLOG

#info log
log4j.appender.INFOLOG =org.apache.log4j.DailyRollingFileAppender
log4j.appender.INFOLOG.File= ${log.dir}/${log.info.file}
log4j.appender.INFOLOG.DatePattern=.yyyy-MM-dd
log4j.appender.INFOLOG.Threshold=INFO
log4j.appender.INFOLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.INFOLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n

#debug log
log4j.appender.DEBUGLOG =org.apache.log4j.RollingFileAppender
log4j.appender.DEBUGLOG.File= ${log.dir}/${log.debug.file}
log4j.appender.DEBUGLOG.Threshold=DEBUG
log4j.appender.DEBUGLOG.MaxFileSize=128MB
log4j.appender.DEBUGLOG.MaxBackupIndex=3
log4j.appender.DEBUGLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.DEBUGLOG.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p [%t] %c.%M(%L) - %m%n

이 때 로그를 인쇄하기 전에 시스템에서 로그의 출력 경로와 파일 이름의 환경 변수를 정의해야 합니다.

System.setProperty(“log.dir”, logDir);

System.setProperty(“log.info.file”, infoLogFileName);

System.setProperty(“log.debug.file”, debugLogFileName);

첨부: Pattern 매개변수의 형식 의미
% c 출력 로그 정보가 속한 클래스의 전체 이름
% d 출력 로그 시간점의 날짜나 시간, 기본 형식은 ISO8601이며, 그 다음에 형식을 지정할 수도 있습니다. 예를 들어:% d {yyy-MM-dd HH:mm:ss}, 출력 유사: 2013-8-19-22:10:28
% f 출력 로그 정보가 속한 클래스 이름
% l 출력 로그 이벤트의 발생 위치, 즉 출력 로그 정보의 문장이 있는 클래스의 몇 번째 줄에 있습니다
% m 출력 코드에 지정된 정보, 예를 들어log(message)의message
%n은 Windows 플랫폼은 "/r/n", Unix 플랫폼은 "/n"으로 리턴 문자를 출력합니다.
%p 출력 우선 순위, 즉 DEBUG, INFO, WARN, ERROR, FATAL입니다.debug () 출력을 호출하는 경우 DEBUG입니다.
% r 이 로그 정보를 출력하는 데 소모되는 밀리초
% t 출력이 로그 이벤트를 생성하는 스레드 이름

좋은 웹페이지 즐겨찾기