gpt4 book ai didi

java - 为该 Log4J 代码设置的级别在哪里?

转载 作者:行者123 更新时间:2023-12-03 07:50:30 25 4
gpt4 key购买 nike

我有以下 Log4J 类:

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.Level;

public class HelloWorldLog4J {

private static final Logger logger = LogManager.getLogger("HelloWorld");
// private static final Logger logger = LogManager.getLogger

public static void main(String[] args) {

System.out.println("...Before");
System.out.println();

logger.info("Hello, this is an INFO message");
logger.warn("Hello, this is an WARN message");
logger.fatal("Hello, this is a FATAL message");
logger.fatal("Hello, this is a FATAL message ALSO, #2");
logger.fatal("Hello, this is a FATAL message ALSO, #3");
logger.fatal("Hello, this is a FATAL message ALSO, #4");
logger.debug("Hello, this is a FATAL message");
logger.info("Hello, this is an INFO message");
logger.info("Hello, this is an INFO message");
System.out.println();
System.out.println("...After");

}

}

当我运行这段代码时,我得到以下输出:

...Before

11:37:38.745 [main] FATAL HelloWorld - Hello, this is a FATAL message
11:37:38.745 [main] FATAL HelloWorld - Hello, this is a FATAL message ALSO, #2
11:37:38.745 [main] FATAL HelloWorld - Hello, this is a FATAL message ALSO, #3
11:37:38.745 [main] FATAL HelloWorld - Hello, this is a FATAL message ALSO, #4

...After

我一直在寻找确定我在这里的级别的属性文件(它是 log4j.properties 或 log4j.xml ),但我不知道在哪里寻找它。我读过一次它是一个环境变量,不知道它是如何工作的

我以为它可能在 java 类(即 HelloWorldLog4J )的目录中,但它不在那里。

编辑:我这样运行我的代码:

C:\Users\Adel\JavaCoding>java -cp C:\apache_log4j_beta5\apache-log4j-2.0-beta5-b
in\log4j-api-2.0-beta5.jar;C:\apache_log4j_beta5\apache-log4j-2.0-beta5-bin\log4
j-core-2.0-beta5.jar;. HelloWorldLog4J

如果根是 JAR 文件,类路径的根在哪里?

谢谢

最佳答案

Log4j 2.X 按照以下步骤进行 self 配置:

  • Log4j 将检查 log4j.configurationFile 系统属性,如果已设置,将尝试使用与文件扩展名匹配的 ConfigurationFactory 加载配置。
  • 如果没有设置系统属性,YAML ConfigurationFactory 将在类路径中查找 log4j2-test.yamllog4j2-test.yml
  • 如果未找到此类文件,JSON ConfigurationFactory 将在类路径中查找 log4j2-test.jsonlog4j2-test.jsn
  • 如果找不到这样的文件,XML ConfigurationFactory 将在类路径中查找 log4j2-test.xml
  • 如果找不到测试文件,YAML ConfigurationFactory 将在类路径中查找 log4j2.yamllog4j2.yml
  • 如果找不到 YAML 文件,JSON ConfigurationFactory 将在类路径中查找 log4j2.jsonlog4j2.jsn
  • 如果无法找到 JSON 文件,XML ConfigurationFactory 将尝试在类路径中找到 log4j2.xml
  • 如果找不到配置文件,将使用DefaultConfiguration。这将导致日志输出转到控制台。

对于您当前的配置,您没有任何这些文件,因此 Log4j 使用 DefaultConfiguration,它执行以下代码:

public DefaultConfiguration() {

setName(DEFAULT_NAME);
final Layout layout = PatternLayout.createLayout("%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n",
null, null, null);
final Appender appender = ConsoleAppender.createAppender(layout, null, "SYSTEM_OUT", "Console", "false",
"true");
appender.start();
addAppender(appender);
final LoggerConfig root = getRootLogger();
root.addAppender(appender, null, null);

final String levelName = PropertiesUtil.getProperties().getStringProperty(DEFAULT_LEVEL);
final Level level = levelName != null && Level.valueOf(levelName) != null ?
Level.valueOf(levelName) : Level.ERROR;
root.setLevel(level);
}

所以你的记录器有一个控制台附加器,具有错误级别(因此它只打印错误和致命消息)和以下模式:%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n

您可以通过编程方式配置记录器(如 DefaultConfiguration 所做的那样)或使用任何配置文件。

您在此页面中有一些示例配置文件:

https://logging.apache.org/log4j/2.x/manual/configuration.html

关于java - 为该 Log4J 代码设置的级别在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29459894/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com