文
章
目
录
章
目
录
Log4j2的ConsoleAppender将应用程序生成的日志事件以System.out或System.err形式输出,默认目标是System.err。
用户在配置中可以使用PatternLayout属性指定控制台appender的日志消息模式。
1.Log4j2 ConsoleAppender 配置
使用和自定义以下给定的配置片段以配置ConsoleAppender。注意以下事项:
- 我们可以在Properties部分定义常见的日志模式LOG_PATTERN常数并可以在多个appender中重复使用。
- target属性指定日志消息的目标,即SYSTEM_OUT或SYSTEM_ERR。
- follow属性指示在初始化日志记录配置后,appender 是否应接受System.out或System.err的重新配置。
1.1 使用log4j2.xml
在以下配置中,我们配置了一个名为“console”的ConsoleAppender,并指定LOG_PATTERN的target为SYSTEM_OUT。
<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30">
<Properties>
<Property name="LOG_PATTERN">%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} %p %m%n</Property>
</Properties>
<Appenders>
<Console name="console" target="SYSTEM_OUT" follow="true">
<PatternLayout pattern="${LOG_PATTERN}"/>
</Console>
</Appenders>
<Loggers>
<Root level="info">
<AppenderRef ref="console"/>
</Root>
</Loggers>
</Configuration>
1.2. 使用log4j2.properties
在以下配置中,我们正在将’console’配置为具有指定转换模式的System.out目标。
log4j.rootCategory=info,console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.target=System.out
log4j.appender.console.immediateFlush=true
log4j.appender.console.encoding=UTF-8
#log4j.appender.console.threshold=info
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.conversionPattern=%d{yyyy-MM-dd'T'HH:mm:ss.SSSZ} %p %m%n
2. 初始化
大多数web框架(例如Spring boot)不需要任何特定的代码来引导日志配置。我们所需要做的就是将log4j2.xml或log4j2.properties文件放在类路径中。
对于独立的Java应用程序,我们可以使用Configurator类来配置日志记录。这对于我们为特定的单元测试配置Log4j2时特别有用。
Configurator.initialize("TestClass", "log4j2.xml");
注意log4j2.xml或指定文件必须存在于应用程序的类路径中。
3.Spring Boot示例
我们把log4j2.xml文件放在Spring Boot应用程序中。我们添加了以下3个语句来验证日志是否出现在控制台中以及正确的阈值。
在上述配置文件中,我们将阈值设置为info,因此只有info和error日志将在控制台中打印出来。
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.context.ApplicationContext;
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
private static final Logger LOGGER = LoggerFactory.getLogger(Application.class);
public static void main(String[] args) {
ApplicationContext ctx = SpringApplication.run(Application.class, args);
LOGGER.info("Info level log message");
LOGGER.debug("Debug level log message");
LOGGER.error("Error Message Logged !!!", new NullPointerException("NullError"));
}
}
控制台输出:
2021-02-24T18:24:00.107+0530 INFO Info level log message
2021-02-24T18:24:00.109+0530 ERROR Error Message Logged !!!
java.lang.NullPointerException: NullError
at com.howtodoinjava.logging.demo.Application.main(Application.java:20) [classes/:?]