Log4j 不记录消息

时间:2021-07-17 18:44:18

标签: java logging

所以我正在编写一个游戏,我决定我应该从 System.out.println 切换到实际的日志记录 API 并决定使用 Log4j。我按照教程使用基本配置,但是当我调用 logger.info("string stuff"); 时,它实际上并没有记录任何内容。 我有:

public static final Logger logger = Logger.getLogger("Main.class");

public static void main(String[] args) {
     BasicConfigurator.configure();
     logger.info("Starting Game...");
}

1 个答案:

答案 0 :(得分:2)

您应该使用命令行选项或配置文件配置 Log4j,以启用 info 级别的日志记录到附加程序,例如系统控制台。假设您使用的是 Log4j2,请查看 Configuration docs

Log4j2中处理配置的顺序是:

<块引用>
  1. Log4j 将检查“log4j2.configurationFile”系统属性,如果设置,将尝试使用 与文件扩展名匹配的 ConfigurationFactory。请注意,这 不限于本地文件系统上的某个位置,并且可能 包含一个网址。
  2. 如果未设置系统属性,则属性 ConfigurationFactory 将在类路径中查找 log4j2-test.properties。
  3. 如果未找到此类文件,YAML ConfigurationFactory 将在类路径中查找 log4j2-test.yaml 或 log4j2-test.yml。
  4. 如果未找到此类文件,JSON ConfigurationFactory 将在类路径中查找 log4j2-test.json 或 log4j2-test.jsn。
  5. 如果未找到此类文件,XML ConfigurationFactory 将在类路径中查找 log4j2-test.xml。
  6. 如果找不到测试文件,则属性 ConfigurationFactory 将在类路径上查找 log4j2.properties。
  7. 如果无法找到属性文件,YAML ConfigurationFactory 将查找 log4j2.yaml 或 log4j2.yml 类路径。
  8. 如果找不到 YAML 文件,JSON ConfigurationFactory 将在类路径中查找 log4j2.json 或 log4j2.jsn。
  9. 如果找不到 JSON 文件,XML ConfigurationFactory 将尝试在类路径上定位 log4j2.xml。
  10. 如果找不到配置文件,则将使用 DefaultConfiguration。这将导致日志输出进入控制台。

如果您尚未配置任何内容,您很可能在第 10 点并使用默认配置。当您使用较低的 error 级别时,这只会将 info 级别及更高级别记录到控制台。根据文档:

<块引用>

如果找不到配置文件,Log4j 将提供默认配置。 DefaultConfiguration 类中提供的默认配置将设置:

  • 附加到根记录器的 ConsoleAppender。
  • 一个 PatternLayout 设置为模式 "%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n" 附加到 ConsoleAppender

请注意,默认情况下,Log4j 将根记录器分配给 Level.ERROR。