2011-09-27 8 views
1

특정 포트에서 해당 작업을 수신 대기하는 응용 프로그램이 있습니다. 이 응용 프로그램은 인수에 다른 포트를 지정하여 여러 인스턴스에서 실행할 수 있습니다.Log4j 별도의 파일에 로깅

MyApp를-1211.bat는

java MyApp 1211 

MyApp를-1311.bat이

java MyApp 1311 

MyApp를-1411.bat 파일에

java MyApp 1411 

이 응용 프로그램 로그를 포함 포함 포함되어 있습니다. 문제는 세 개의 인스턴스 모두 을 단일 파일 myApp.log에 기록합니다. log4j에게 다른 로그 파일을 사용하도록 알려줄 수 있습니까? like :

myApp-port1211.log 
myApp-port1311.log 
myApp-port1411.log 

답변

2

물론 가능합니다. 한 가지 방법은 여러 개의 구성 파일 (log4j.xml/log4j.properties)을 만드는 것입니다. 각 포트 당 하나씩 프로세스입니다.

PropertyConfigurator.configure("log4j-" + port + ".properties"); 

그에 따라 설정 파일을 만듭니다 : 구성 파일을로드하면 당신은 현재 포트 번호에 따라 올바른 하나를 선택할 수 log4j-1211.properties을, log4j-1311.properties, ...

대안은 자바 코드를 통해 런타임에 파일 로깅을 구성하는 것입니다 :

String logFilename = "./myApp-port" + port + ".log"; 
Layout layout = new PatternLayout("%d{ISO8601} %-5p [%t] %c{1}: %m%n"); 
FileAppender fileAppender = new FileAppender(layout, logFilename, false); 
fileAppender.setThreshold(Level.DEBUG); 
Logger.getRootLogger().addAppender(fileAppender); 
+0

현재 – user960740

+0

내 업데이트 된 대답 – Robert

0
따를 때 당신의 log4j.xml의 시스템 속성을 참조 할 수 있습니다

보내고 다음과 같은 경우

java -DMY_PARAM=1234 MyApp 1234

가 Obiously 당신이 dupplication을 방지 할 수 있습니다

<appender name="ROLL" class="org.apache.log4j.rolling.RollingFileAppender"> 
       <!-- The active file to log to --> 
       <param name="file" value="mylog${MY_PARAM}.log" /> 
</appender> 

지금 당신은 단지 프로그래밍 방식 System.setProperty("MY_PARAM", args[0]) 당신의 main() 방법으로 또는 자바를 실행할 때 시스템 속성으로 매개 변수를 삽입해야 박쥐 또는 셸 스크립트에서 응용 프로그램을 실행하고 있습니다.

java -DMY_PARAM=%1 MyApp %1

자세한 내용은 아래를 참조하시기 바랍니다 :

http://wiki.apache.org/logging-log4j/Log4jXmlFormat

Using system environment variables in log4j xml configuration

+0

를 참조 정보 파일의 log4j 속성을 사용하고 프로퍼티 xml 파일 대신 파일에 어떻게 번역 않는 구성 파일 원인에 대한 가능한 동일? – user960740

0

다른 답변에 의해 제안 속성 구성, 파일을 직접로드에 갈 경우에서, log4j에 기본을 해제하는 것을 잊지 마세요 env를 추가하여 초기화합니다. 프로그램의 명령 행 변수 정의 :

-Dlog4j.defaultInitOverride=true 
+0

무엇을 의미합니까? – user960740

+0

@ user960740 Log4j에는 정적 코드 블록 내에 내장 된 기본 초기화가 있습니다.이 기본 초기화는 사용자가 작업을 수행하기 전에 실행될 가능성이 큽니다. 이 환경 변수는이 실행을 금지합니다. 원하는 구성으로 시작하는지 확인할 수 있습니다. – MaDa

관련 문제