Log4J는 여러 사용자 정의 로그 파일을 출력합니다
실제 애플리케이션에서 독립 로그 파일을 출력 해야하는 경우 필요한 컨텐츠를 원래 로그에서 어떻게 분리하고 별도의 로그 파일을 형성 할 수 있습니까?
먼저 콘솔 및 테스트 파일에 로그를 기록하는 공통 log4j.properties 파일을 살펴 보겠습니다.
코드 사본은 다음과 같습니다.
log4j.rootlogger = 디버그, 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
동일한 클래스에서 여러 로그 파일을 출력 해야하는 경우 어떻게해야합니까? 실제로 진실은 동일합니다.
코드 사본은 다음과 같습니다.
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
다른 로그에 다른 로그를 사용해야합니다 (예 : logger1.info ( "ABC")는 test1.log 로의 출력에 사용해야합니다.
또 다른 문제는 이러한 사용자 정의 로그가 Log4J.RootLogger로 구성된 로그에 출력된다는 것입니다. 걱정하지 마십시오. 여기 스위치가 있습니다.
log4j.additivity
Log4J.RootLogger로 구성된 로그로 출력할지 동시에 설정하면 다른 장소로 출력되지 않습니다.
그러나이 방법에는 작은 결함이 있습니다. 즉, 인쇄 된 로그의 클래스 이름은 MyLogger 또는 MyLogger2 일 수 있습니다.
2 동적 구성 경로
프로그램에서 요구하는 로그 경로를 지속적으로 변경해야하고 매번 구성 파일을 변경할 수없는 경우 환경 변수를 사용하여 해결할 수 있습니다.
log4J의 구성은 다음과 같습니다.
코드 사본은 다음과 같습니다.
log4j.rootlogger = Debug, Infolog, Debuglog
#info 로그
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 로그
log4j.appender.debuglog = org.apache.log4j.rollingfileAppender
log4j.appender.debuglog.file = $ {log.dir}/$ {log.debug.file}
log4j.appender.debuglog.threshold = 디버그
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);
첨부 파일 : 패턴 매개 변수의 형식 의미
%C 로그 정보가 속한 클래스의 전체 이름
%d 로그 시점의 날짜 또는 시간은 ISO8601입니다. : 2013-8-19-22:10:28
%f 로그 정보가 속한 클래스의 클래스 이름
%l 출력 로그 이벤트가 발생합니다. 즉, 출력 로그 정보를 출력한다는 명령문
%m 코드에 지정된 정보, 예를 들어 로그의 메시지 (메시지)
%n 출력 캐리지 리턴 라인 브레이크, Windows 플랫폼은 "/r/n"이고 Unix 플랫폼은 "/n"입니다.
%P 출력 우선 순위, 즉 디버그, 정보, 경고, 오류, 치명적. Debug ()를 호출하여 출력되면 디버그입니다.
%r 출력 응용 프로그램 시작에서 찍은 밀리 초 수를 로그 정보를 출력합니다.
%t 로그 이벤트를 생성하는 스레드 이름을 출력합니다.