0

我有多个文件夹,每个文件夹都有几个 xml。

在循环开始时在 for 循环中解组 XMls 时,我正在根据文件夹 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 是我的文件夹名称。

它创建了所需的文件夹,但它附加到在循环开始时创建的文件夹中创建的错误日志文件。

请帮助我如何设置变量。

4

2 回答 2

1

您可以folder通过调用log4jAPI 来更改,如下所示:

获取你的root logger然后修改你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根据需要修改变量即可创建新的日志文件。

于 2013-08-30T15:50:49.860 回答
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
于 2013-08-30T15:44:46.960 回答