2013-08-30 64 views
0

我有多个文件夹,每个文件夹都有很少的xml。使用基于文件夹名称的log4j创建多个日志文件

虽然unmarshalling XMls for循环在循环的开始处我设置文件夹变量基于文件夹xml的我解组。但我最终无法更改文件夹变量的值。

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您的rootlogger然后修改您的appender通过name在这种情况下,因为您的问题说:“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 

另一种方式,如果您无法添加参数,则以编程方式添加。例如:

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!"); 
    } 

} 

你可以看到整个过程中,如果您添加到虚拟机的参数:

获取:

-Dlog4j.debug