簡體   English   中英

根據文件夾名稱使用log4j創建多個日志文件

[英]To create multiple log files with log4j based on folder name

我有多個文件夾,每個文件夾都只有幾個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是我的文件夾名稱。

它創建所需的文件夾,但附加到在循環開始時創建的文件夾中創建的錯誤日志文件中。

請幫助我如何設置變量。

您可以通過調用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變量即可。

您可以通過兩種方式做到這一點。 最簡單的方法是在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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM