如何在Log4j.xml中使用动态文件名?

时间:2015-12-29 14:36:48

标签: log4j

如何从属性文件中读取属性并在log4j.xml中使用(如果未找到)则使用默认路径。

对于实例

<appender name="FILE" class="org.apache.log4j.FileAppender">    
    <param name="File" value="logs/${logfilename}.log" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d::[%t]::%-5p::%c::%x - %m%n" />
    </layout>       
</appender>

在上面的代码片段中,我想从属性文件中检索logfilename的值。如果我在属性文件中提到logfilename=abc_log,则应在logs文件夹中生成abc_log.log。如果我无法找到logfilename属性,则应默认为实例/logs/default.log

调用位置 你能帮忙解决一下,我怎样才能实现上述方法?

1 个答案:

答案 0 :(得分:0)

下面是使用Log4J动态生成文件名的代码。它根据输入文件名和当前日期时间更改其名称。 (如果您多次运行相同的文件,那么非常有用。)(在另一个帖子中找到)

public class LogClass {

private static Logger log =  Logger.getLogger(LogClass.class);
private static boolean initializationFlag = false;
private static String fileName;

private static void intializeLogger(){
    log.setLevel(Level.DEBUG);

    DateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss");
    Date date = new Date();

    RollingFileAppender appender = new RollingFileAppender();
    appender.setAppend(true);
    appender.setMaxFileSize("1MB");
    appender.setMaxBackupIndex(1);
    appender.setFile(fileName + "_" + dateFormat.format(date) + ".log");

    PatternLayout layOut = new PatternLayout();
    layOut.setConversionPattern("%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n");
    appender.setLayout(layOut);

    log.addAppender(appender);
}

public static Logger getLogger(){
    if(initializationFlag == false){
        intializeLogger();
        initializationFlag = true;
        return LogClass.log;
    }
    else{
        return LogClass.log;
    }
}

public static void setFileName(String fileName){
    LogClass.fileName = fileName;
}