java 사용자 정의 로그 출력 파일 (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 출력이 로그 이벤트를 생성하는 스레드 이름