我有多个文件夹,每个文件夹只有几个xml。
虽然在循环开始时在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 :(得分:1)
您可以通过调用folder
API更改log4j
,如下所示:
获取root
logger
,然后按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
变量。
答案 1 :(得分:0)
你可以用两种方式做到这一点。最简单的方法是在VM参数中添加所需的变量。例如添加目录名称:
-Dfolder=E:/Logging/folderName
另一种方式,如果你不能添加参数,就是以编程方式添加。 e.g:
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