0

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

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");
}
}

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

4

2 回答 2

1

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

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
于 2012-11-16T12:30:13.020 回答
1

如果您想动态设置附加程序,您应该尝试将新附加程序设置为根记录器:

Logger logger = Logger.getRootLogger();
FileAppender appender = new DailyRollingFileAppender(new PatternLayout(
   PatternLayout.DEFAULT_CONVERSION_PATTERN), "yourfilename.log", "'.'yyyy-MM-dd");
logger.addAppender(appender)
于 2012-11-16T12:33:20.683 回答