《Log4j2官方文档》自动加载配置

Log4j可以在初始化的时候执行自动配置。当Log4j启动的时候,会首先定位所有的ConfigurationFactory的配置然后会根据权重进行从高到低的排序。目前的版本,Log4j包含了四种类型的ConfigurationFactory的实现,JSONYAMLpropertiesXML

1:Log4j将会检查 log4j.configurationFile的系统属性,如果已经设置了对应的属性,将会使用ConfigurationFactory对应的属性去加载配置。
2:如果没有设置对应的系统属性,将会在classpath中寻找log4j2-test.properties文件。
3:如果没有找到,则会在classpath中继续寻找log4j2-test.yaml或者log4j2-test.yml文件。
4:如果还是没有找到,则会在classpath中继续寻找log4j2.json或者log4j2-test.jsn文件。
5:如果还是没有找到,则会在classpath中继续寻找log4j2.xml文件。
6:如果test文件不能classpath中被定为,那么就会寻找log4j2.properties文件。
7:如果properties文件不能被定位,就会在classpath中寻找YAML的配置文件,log4j2.yaml或者log4j2.yml文件。
8:如果YAML文件不能被定位,就会在classpath中寻找JSON格式的配置文件,log4j2.json或者log4j2.jsn文件。
9:如果JSON文件不能被定位,就会在classpath中寻找XML格式的配置文件,log4j2.xml
10:如果依然没有配置文件被定位,那么将会使用缺省的配置DefaultConfiguration。日志将会被直接输出到控制台。

译者附:设置log4j2的配置必然生效是哪个?就是他log4j2-test.properties

例子应用MyApp将会说明Log4j是如何工作的。

 

import com.foo.Bar;

// Import log4j classes.
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

public class MyApp {

// Define a static logger variable so that it references the
// Logger instance named "MyApp".
private static final Logger logger = LogManager.getLogger(MyApp.class);

public static void main(final String... args) {

// Set up a simple configuration that logs on the console.

logger.trace("Entering application.");
Bar bar = new Bar();
if (!bar.doIt()) {
logger.error("Didn't do it.");
}
logger.trace("Exiting application.");
}
}

MyApp首先引用log4j的关联类,然后定义了一个静态的变量logger,指定了logger的名称是MyApp.class

MyApp使用的Bar类,定义在com.foo包的下面。

 

package com.foo;
import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.LogManager;

public class Bar {
static final Logger logger = LogManager.getLogger(Bar.class.getName());

public boolean doIt() {
logger.entry();
logger.error("Did it again!");
return logger.exit(false);
}
}

如果Log4j无法定位配置文件,那么就会使用缺省的配置。DafaultConfiguration类定义了基本的配置,配置的内容:

  • ConsoleAppender设置成root
  • PatternLayout的格式”%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} – %msg%n”

注意:缺省的Log4j的日志级别是LEVEL.ERROR.
MyApp的日志输出

 

17:13:01.540 [main] ERROR com.foo.Bar - Did it again!
17:13:01.540 [main] ERROR MyApp - Didn't do it.

按照前面的描述,Log4j尝试从配置文件中加载配置,一个缺省配置文件的内容大致如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>

一旦你将上面的配置文件作为log4j2.xml放到classpath中,就会得到和上面一模一样的输出(因为这个和默认配置是一样的)。
改变Root 的level为trace,日志输出就会变成下面的样子:

 

17:13:01.540 [main] TRACE MyApp - Entering application.
17:13:01.540 [main] TRACE com.foo.Bar - entry
17:13:01.540 [main] ERROR com.foo.Bar - Did it again!
17:13:01.540 [main] TRACE com.foo.Bar - exit with (false)
17:13:01.540 [main] ERROR MyApp - Didn't do it.
17:13:01.540 [main] TRACE MyApp - Exiting application.

请注意,当使用默认配置的时候,其他状态的日志都被禁用了.

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/113880.html

(0)
上一篇 2021年8月27日
下一篇 2021年8月27日

相关推荐

发表回复

登录后才能评论