我有以下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文件,那么classpath的根目录在哪里?
由于
答案 0 :(得分:4)
Log4j 2.X按照以下步骤进行自我配置:
log4j.configurationFile
系统属性,如果设置,将尝试使用与文件扩展名匹配的ConfigurationFactory加载配置。log4j2-test.yaml
或log4j2-test.yml
。log4j2-test.json
或log4j2-test.jsn
。log4j2-test.xml
。log4j2.yaml
或log4j2.yml
。log4j2.json
或log4j2.jsn
。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);
}
因此,您的记录器有一个Console appender,具有ERROR级别(因此它只打印ERROR和FATAL消息)和以下模式:%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
。
您可以以编程方式配置记录器(例如DefaultConfiguration
正在执行)或使用任何配置文件。
您在此页面中有一些示例配置文件:
https://logging.apache.org/log4j/2.x/manual/configuration.html
答案 1 :(得分:2)
一些事情。
您只获取 ERROR 级别日志,因为默认情况下log4net将根记录器设置为级别 ERROR 。所以基本上你现在没有配置。
请注意,默认情况下,Log4j会将根记录器分配给Level.ERROR。 https://logging.apache.org/log4j/2.x/manual/configuration.html
Log4j2查找 log4j2.xml 。请注意名称
答案 2 :(得分:1)
您可以通过多种方式配置log4j设置。这也取决于您是否使用log4j 1.x或2.x
log4j 2.x版本中有一个非常好的自动配置功能。
1. Log4j will inspect the "log4j.configurationFile" system property and, if set, will
attempt to load the configuration using the ConfigurationFactory that matches the
file extension.
..
..
7. If a JSON file cannot be located the XML ConfigurationFactory will
try to locate log4j2.xml on the classpath .
在上面查找简单的 log4j2.xml https://logging.apache.org/log4j/2.x/manual/configuration.html
答案 3 :(得分:1)
尝试:
BasicConfigurator.configure();
Logger.getRootLogger().setLevel(Level.INFO);
System.out.println("...Before");
//code ...
您可以通过编程方式修改关卡
Logger.getRootLogger().setLevel(Level.TRACE);