如何为所有类配置log4j fileappender?

时间:2012-11-16 12:21:41

标签: java log4j configure fileappender

在我的应用程序中,我读入了一个输入文件(例如myFile1.txt)并创建了一个具有相同名称的输出文件(例如myFile2log)。要点是输入文件将在java应用程序中读取,而不是作为命令行参数给出。因此,需要在应用程序中设置一个appender,例如

public class Example {
private static final Logger LOG = Logger.getLogger(Example.class);

public Example() throws IOException {
    FileAppender appender = new DailyRollingFileAppender(new PatternLayout(
            PatternLayout.DEFAULT_CONVERSION_PATTERN), "yourfilename.log",
            "'.'yyyy-MM-dd");
    LOG.addAppender(appender);
    LOG.setLevel((Level) Level.DEBUG);
    LOG.debug("blabla");

    new RandomClass();
}

public static void main(String[] args) throws IOException {
    new Example();
}
}

public class RandomClass {
private static final Logger LOG = Logger.getLogger(RandomClass.class);

public RandomClass() {
    LOG.debug("hello Randomclass");
}
}

问题在于:如果我执行上述操作,则自定义文件appender仅适用于定义了fileappender的特定类,但不适用于任何其他类。因此,“RandomClass”的输出不会写入此日志文件,但这是必需的。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:1)

您可以在类路径中使用log4j.properties文件,然后只需在所有类中初始化logger。

private static final Logger LOG = Logger.getLogger(Example.class);
构造函数中不需要

和Appender。您的属性文件应包含

log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=yourfilename.log
log4j.appender.R.MaxFileSize=2048KB

答案 1 :(得分:1)

如果您想动态设置appender,您应该尝试将新的appender设置为根记录器:

Logger logger = Logger.getRootLogger();
FileAppender appender = new DailyRollingFileAppender(new PatternLayout(
   PatternLayout.DEFAULT_CONVERSION_PATTERN), "yourfilename.log", "'.'yyyy-MM-dd");
logger.addAppender(appender)