【问题标题】:Log4J loggers for different classes不同类的 Log4J 记录器
【发布时间】:2012-08-04 06:18:47
【问题描述】:

我想使用 Log4J 来记录我的 java 项目。 我在 src 目录下创建了一个 log4j.properties 文件,内容如下:

# Root logger option
log4j.rootLogger=INFO, file, stdout
log4j.logger.DEFAULT_LOGGER=INFO,file2

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=file.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d [%t] %-5p %c - %m%n



# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n


log4j.appender.file2=org.apache.log4j.FileAppender
log4j.appender.file2.File=file2.log
log4j.appender.file2.layout=org.apache.log4j.PatternLayout
log4j.appender.file2.layout.ConversionPattern=%d [%t] %-5p %c - %m%n

例如,我只想在我的主要方法中使用“DEFAULT_LOGGER”。于是我写了:

static Logger log = Logger.getLogger("DEFAULT_LOGGER");
log.fatal("Process Logger");

但是当我执行 main 方法时,我将消息“Process Logger”打印到所有 Appender(stdout、file 和 file2)但我只想将它打印到 file2。我该怎么做或更好地说出我做错了什么?

第二点是,当我第二次执行main方法时,它并没有覆盖file和file2,它只是在textfile中添加了一行。我怎样才能避免这种情况?

【问题讨论】:

    标签: java eclipse class log4j


    【解决方案1】:

    Log4j 有一个叫做additivity 的东西。默认情况下,它设置为 true,这意味着您编写的每个日志不仅会被特定记录器记录,还会被其祖先(在本例中为根记录器)记录。

    要将其设置为 false,请尝试以下操作:

    log4j.additivity.DEFAULT_LOGGER = false
    

    了解更多信息here。

    【讨论】:

    • 谢谢。现在可以将输出仅存储在 file2 中而不存储在 stdout 中。但是还有两件事。当我启动 main 方法时,它仍然会创建 file 和 file2 。文件为空,输出仅写入 file2 但我根本不希望创建文件。这是如何工作的?还有一个问题,当我执行该方法2次时,log4j没有覆盖file2,它只是将输出添加到文件中。
    • Log4j 在开始时扫描属性文件并创建附加到记录器定义的所有需要​​的文件。因此,如果您不想创建文件,请从记录器中删除附加程序:log4j.rootLogger=INFO, file, stdout,使其成为:log4j.rootLogger=INFO, stdout
    • 为什么要覆盖文件?这基本上超出了记录的目的......
    • 因为当我重新启动我的应用程序时,我想要一个没有旧条目的新日志文件(可能从最后一天开始)
    • 当然我可以用 java 删除它,但我不想这样做。使用标准 Java 日志记录 API,可以只说是要添加输出还是要覆盖它
    【解决方案2】:

    试试:

    log4j.additivity.DEFAULT_LOGGER = false

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多