2013-08-30 8 views
0

몇 개의 XML이있는 폴더가 여러 개인 폴더가 여러 개 있습니다.폴더 이름을 기반으로 log4j로 여러 로그 파일을 만들려면

루프의 시작 부분에서 for 루프의 XMls를 언 마샬링하는 동안 xml의 폴더를 기반으로 폴더 변수를 설정하는 중 언 마샬링 중입니다. 하지만 결국 varialbe 폴더의 가치를 변경할 수 없습니다.

의 Log4j 파일 :

log4j.rootLogger=DEBUG, theFileAppender log4j.category.org.exolab.castor.xml=ERROR, theFileAppender log4j.category.org.castor.core.util=ERROR, theFileAppender

log4j.appender.theFileAppender=org.apache.log4j.FileAppender log4j.appender.theFileAppender.File = ${folder}/error.log

log4j.appender.theFileAppender.Append=false

log4j.appender.file.MaxFileSize=10MB

,

log4j.appender.file.MaxBackupIndex=1 log4j.appender.theFileAppender.layout=org.apache.log4j.PatternLayout log4j.appender.theFileAppender.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c %x - %m%n

내가 폴더를 설정하고 루프의 시작 : 루프의 끝에서

System.setProperty("folder", "E:/Logging/folderName");

을 : 내가하여 폴더를 설정하고있다 :

Properties properties = new Properties(System.getProperties()); properties.setProperty("folder","E:/Logging/folderName");

folderName은 내 폴더 이름입니다.

필요한 폴더를 만들지 만 루프 시작시 생성 된 폴더에 생성 된 오류 로그 파일에 추가됩니다.

변수 설정 방법을 알려주세요.

답변

0

당신은이 같은 log4j API를 호출하여 folder을 변경할 수 있습니다 당신은 가상 머신의 인수에 추가하는 경우

public class ChangeFileTest { 

    private static Logger LOG = Logger.getLogger(ChangeFileTest.class); 

    static { 
     // Get the appender 
     Appender appender = LogManager.getRootLogger() 
       .getAppender("theFileAppender"); 
     if (appender instanceof FileAppender) { 

      // The new filename 
      String filename = "C:\\tmp\\newstout.log"; 

      // Change the file 
      ((FileAppender) appender).setFile(filename); 
      ((FileAppender) appender).setAppend(true); 

      // Use the new file 
      ((FileAppender) appender).activateOptions(); 
     } 
    } 

    public static void main(String[] args) { 
     LOG.info("Everything is OK!"); 
    } 

} 

당신은 전체 프로세스를 볼 수 있습니다 rootlogger을 입력 한 다음 appendername (이 경우 )으로 수정하십시오. 질문에 : "theFileAppender"). 당신이 볼 수 있듯이

String logFolderName = "newfoldername"; 
String logFilePath = "E:/Logging/" + logFolderName + "/error.log"; 

Logger logger = Logger.getRootLogger(); 
FileAppender appender = (FileAppender)logger.getAppender("theFileAppender"); 
appender.setFile(logFilePath); 
appender.activateOptions(); 

, 당신은 새 로그 파일에 대한 사용자의 요구에 따라 logFolderName 변수가 생성 될 수정해야합니다.

+0

작동 중입니다. 감사. 하지만 왜이 경우 setProperty()가 작동하지 않습니까? – Naveen

+0

@Naveen 왜'setProperty (..)'가 작동하지 않는 지 모르겠다.'log4j' API는 다음과 같이 될 수 있기 때문에 문제를 해결하기 위해 짧고 좋은 방법을 제공했다. 여러면에서 호출됩니다. 이것이 당신의 질문을 해결하는 대답이라고 생각한다면, 그것을 선택한 것으로 확인하는 것을 잊지 마십시오 :-) –

0

두 가지 방법으로 가능합니다. 가장 쉬운 방법은 VM 인수에 필요한 변수를 추가하는 것입니다. 예 : 디렉토리 이름을 추가하십시오.

-Dfolder=E:/Logging/folderName 

다른 방법으로, 인수를 추가 할 수 없으면 프로그래밍 방식으로 추가하는 것입니다. 예 : 얻기

:

-Dlog4j.debug