【问题标题】:How to configure log4j fileappender for all classes?如何为所有类配置 log4j fileappender?
【发布时间】:2012-11-05 04:09:13
【问题描述】:

在我的应用程序中,我读入了一个输入文件(例如 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");
}
}

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

【问题讨论】:

  • 您不能在应用程序旁边使用 log4j.properties 文件来指定附加程序吗?
  • 是的,我在我的应用程序旁边使用了一个 log4j.properties 文件来设置其他设置。但我不知道如何动态调整“全局”fileappender 日志文件。

标签: java log4j configure fileappender


【解决方案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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 非常感谢!我最初认为将 RootLogger 分配给“新”Logger 对于指定的 Logger 来说是“独占的”,但实际上它是“全局的”,这正是所需要的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多