【问题标题】:To create multiple log files with log4j based on folder name根据文件夹名称使用 log4j 创建多个日志文件
【发布时间】:2013-08-30 14:21:44
【问题描述】:

我有多个文件夹,每个文件夹都有几个 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 是我的文件夹名称。

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

请帮我如何设置变量。

【问题讨论】:

    标签: java xml logging castor


    【解决方案1】:

    您可以像这样调用log4j API 来更改folder:

    获取您的root logger,然后通过name 修改您的appender(在这种情况下,正如您的问题所说:“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 变量即可创建新的日志文件。

    【讨论】:

    • 它正在工作。谢谢。但是为什么 'setProperty()' 在这种情况下不起作用?
    • @Naveen 我真的不知道为什么你的setProperty(..) 不起作用,我只是给你一个简短而好的方法(至少对我来说)来解决你的问题,因为log4j API 可以通过多种方式调用。如果您认为这是解决您问题的答案,请不要忘记将其作为已选择的答案进行检查:-)
    【解决方案2】:

    您可以通过两种方式做到这一点。最简单的方法是在 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多