Log4j2 ConsoleAppender 使用详解

位置:首页>文章>详情   分类: 教程分享 > Java教程   阅读(2284)   2023-03-28 11:29:14

ConsoleAppender概述

       Log4j2 ConsoleAppender将应用程序生成的日志事件附加到System.out或System.err中。 默认是System.err。

       Console Appender使用用户在配置中使用PatternLayout属性指定的日志消息格式
 

1. Log4j2 ConsoleAppender 配置

使用和自定义以下给定的配置摘要来配置控制台附加程序。 请注意以下几点:

  • 在 Properties 配置文件常量中,我们可以定义一个通用的日志pattern LOG_PATTERN 。然后在多个appenders之间复用。
  • target属性指定了日志消息的目标,即SYSTEM_OUT或SYSTEM_ERROR。
  • follow属性指示在初始化日志记录配置后,appender 是否应接受System.out或System.err的重新配置。

1.1. 使用 log4j2.xml配置方式

$title(log4j2.xml)
<?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.1. 使用log4j2.properties配置方式

$title(log4j.properties)
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. 配置 Log4j2

大多数Web框架(例如Spring Boot)将不需要任何特定代码来引导日志记录配置。 我们需要做的就是将log4j2.xml或log4j2.properties文件放在类路径中。

对于独立的Java应用程序,我们可以使用PropertyConfigurator类来配置日志记录
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
  
public class Demo 
{
    static Logger logger = Logger.getLogger(Demo.class);
  
    public static void main(String[] args) {
        // PropertiesConfigurator 用于使用properties文件配置logger
        PropertyConfigurator.configure("log4j2.xml");
  
        // 控制台日志
        logger.debug("Log4j console appender configuration is successful !!");
    }
}

3. 实例

我们已将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.leftso.logging.demo.Application.main(Application.java:20) [classes/:?]

地址:https://www.leftso.com/article/802.html

相关阅读

ConsoleAppender概述       Log4j2 ConsoleAppender将应用程序生成的日志事件附加到System.out或System.err中
log4j使用,log4j框架在java编程中还是比较常见的,这里将会讲解通过log4j2的LevelRangeFilter将不同级别log存放不同文件中。
这个Log4j2示例将帮助您使用HTMLLayout配置log4j2.xml文件
简介       Apache Log4j2是对Log4j 1.x的升级,在性能上进行了重大改进,改进了配置文件的自动重装,Java 8 lambda支持和自定义日志级别,从而对Log4j 1....
Log4j 2 简介       Apache Log4j 2是对Log4j 1.x的升级,相对于其先前版本进行了重大改进,例如性能改进,自动重新加载已修改的配置文件,java 8 lambda...
概述       学习配置log4j2.properties文件以将日志语句输出到控制台,滚动文件等
概述下面的log4j2转换模式仅供参考,这样您和我就不会在每次创建/编辑log4j配置文件时浪费时间来构建这些模式
概述       Log4j2 RollingFileAppender是一个OutputStreamAppender,它遵循有关何时应进行滚动(备份)的已配置触发策略,将日志消息写入文件
概述给定log4j2.xml是配置configure multiple appenders(例如控制台附加程序和文件附加程序)的参考
概述了解如何使用log4j LevelRangeFilter过滤器,如果LogEvent中的级别在配置的最小和最大级别范围内,则返回onMatch结果,否则返回onMismatch值