log4j设置日志文件名@ runtime不工作

时间:2012-02-28 07:18:44

标签: java logging log4j

我们在应用程序中要求每次执行时创建的日志文件都有不同的名称(基于功能+当前线程)。我已经看到已经在SO中发布的问题,并尝试使用相同的方法,但它无法正常工作。

所有日志语句都记录在“xyz.log”中(在log4j.properties中指定)。只有“org.apache.log4j.PatternLayout”被记录在abc.log中(在程序中指定)。任何解决这个问题的指针都会非常有用。

log4j.properties

log4j.rootLogger=DEBUG, MyLogger

log4j.appender.MyLogger=org.apache.log4j.FileAppender
log4j.appender.MyLogger.layout=org.apache.log4j.PatternLayout

log4j.appender.MyLogger = org.apache.log4j.DailyRollingFileAppender
log4j.additivity = false
log4j.appender.MyLogger.File=xyz.log
log4j.appender.MyLogger.MaxFileSize = 5MB
log4j.appender.MyLogger.MaxBackupIndex = 20
# Pattern to output the caller's file name and line number.
log4j.appender.MyLogger.layout.ConversionPattern=%d %5p [%t](%c:%L) - %m%n

Java代码

    logger = Logger.getLogger(MyLoggerUtil.class);
    Layout layout = new PatternLayout("org.apache.log4j.PatternLayout");
    logger.removeAllAppenders();
    FileAppender appender = null;
    try {
        appender = new FileAppender(layout, "abc.log", false);
    } catch (IOException e) {
        e.printStackTrace();
    }
    logger.addAppender(appender);
    logger.setLevel((Level) Level.DEBUG);
    logger.debug("This is a debug test");

1 个答案:

答案 0 :(得分:1)

PatternLayout的构造函数需要转换模式,就像lo4j.properties中使用的转换模式一样。因此,将Layout的创建更改为:

Layout layout = new PatternLayout("%d %5p [%t](%c:%L) - %m%n");

log4j.properties

中获取的模式