Spring Boot 使用 Log4j2

Java 中比较常用的日志工具类,有 Log4j、SLF4j、Commons-logging(简称jcl)、Logback、Log4j2(Log4j 升级版)、Jdk Logging。

Spring Boot 默认使用 Logback,但相比较而言,Log4j2 在性能上面会更好。

Spring Boot(版本1.5.10.RELEASE)中使用 Log4j2 非常简单,添加如下依赖:

<!-- Exclude Spring Boot's Default Logging -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-logging</artifactId>
        </exclusion>
    </exclusions>
</dependency>

<!-- Add Log4j2 Dependency -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

<!-- Needed for Async Logging with Log4j 2 -->
<dependency>
  <groupId>com.lmax</groupId>
  <artifactId>disruptor</artifactId>
  <version>3.3.6</version>
</dependency>

<!-- 使用jsonLayout必须依赖jackson -->
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>2.7.4</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.7.4</version>
</dependency>

然后在src/main/resources中添加log4j2.xml配置文件(Spring Boot 还会识别log4j2.jsonlog4j2.yaml):

<?xml version="1.0" encoding="UTF-8"?>
<!-- status表示log4j2本身的日志信息打印级别,和下面的level,不是一个概念 -->
<!--TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF-->
<Configuration status="OFF" monitorInterval="30">
    <Properties>
        <Property name="LOG_PATTERN">
            %d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${hostName} --- [%15.15t] %-40.40c{1.} : %m%n%ex
        </Property>
        <Property name="LOG_FILE_PATH">/var/log/spring-boot-log4j2</Property>
    </Properties>
    <Appenders>
        <Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true">
            <PatternLayout pattern="${LOG_PATTERN}"/>
        </Console>
        <!-- Rolling File Appender -->
        <RollingFile name="FileAppender" fileName="${LOG_FILE_PATH}/spring-boot-log4j2-demo.log"
                     filePattern="${LOG_FILE_PATH}/spring-boot-log4j2-demo-%d{yyyy-MM-dd}-%i.log">
            <PatternLayout>
                <Pattern>${LOG_PATTERN}</Pattern>
            </PatternLayout>
            <!--<JsonLayout complete="false" compact="true">
                <KeyValuePair key="timestamp" value="$${date:yyyy-MM-dd'T'HH:mm:ss.SSSZ}" />
            </JsonLayout>-->
            <Filters>
                <!-- 只记录ERROR级别日志信息,程序打印的其他信息不会被记录 -->
                <!-- 此level设置的日志级别,是过滤日志文件中打印出的日志信息,和Root的level有所区别 -->
                <ThresholdFilter level="ERROR" onMatch="ACCEPT" onMismatch="DENY" />
            </Filters>
            <Policies>
                <SizeBasedTriggeringPolicy size="10MB" />
                <!-- 每天创建一个日志文件 -->
                <TimeBasedTriggeringPolicy interval="1" />
            </Policies>
            <DefaultRolloverStrategy max="10"/>
        </RollingFile>
    </Appenders>
    <Loggers>
        <!-- 用来单独指定日志的形式,比如要为指定包下的class指定不同的日志级别等。 -->
        <!--<Logger name="com.easyjijin.demo.springbootlog4j2" level="debug" additivity="false">
            <AppenderRef ref="ConsoleAppender" />
            <AppenderRef ref="FileAppender"/>
        </Logger>-->

        <!-- AsyncRoot - 异步记录日志 - 需要LMAXDisruptor的支持 -->
        <!-- <AsyncRootlevel="info" additivity="false">
          <AppenderRef ref="Console"/>
          <AppenderRef ref="FileAppender"/>
        </AsyncRoot> -->

        <!-- All < Trace < Debug < Info < Warn < Error < Fatal < OFF. -->
     <!-- 程序会打印高于或等于所设置级别的日志,设置的日志等级越高,打印出来的日志就越少。-->
        <!-- 此level设置的日志级别,是过滤项目中输出的日志信息,和ThresholdFilter的level有所区别 -->
        <Root level="ERROR">
            <AppenderRef ref="ConsoleAppender" />
            <AppenderRef ref="FileAppender"/>
        </Root>
    </Loggers>
</Configuration>

这边需要注意几个日志的级别:

  • Configuration status="OFF":这个status配置的是,Log4j2 组件本身日志级别,指的是如果 Log4j2 本身出错,打印出的日志级别配置。
  • Root level="ERROR":这个level配置的是,程序输入的日志级别,对应log.error("this is a error"),程序会打印高于或等于所设置级别的日志。
  • ThresholdFilter level="ERROR":这个level配置的是,输出到日志文件(或是其他)的日志日志级别,也就是在日志文件只输出ERROR级别的日志,其他无关信息不输出。

在程序中使用 Log4j2 打印日志信息:

@SpringBootApplication
public class Log4j2DemoApplication implements ApplicationRunner {
    private static final Logger logger = LogManager.getLogger(Log4j2DemoApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(Log4j2DemoApplication.class, args);
    }

    @Override
    public void run(ApplicationArguments applicationArguments) throws Exception {
        logger.debug("Debugging log");
        logger.info("Info log");
        logger.warn("Hey, This is a warning!");
        logger.error("Oops! We have an Error. OK");
        logger.fatal("Damn! Fatal error. Please fix me.");
    }
}

或者使用Lombok,可以更方便的使用 Log4j2,需要添加依赖:

<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
</dependency>

使用代码:

import lombok.extern.log4j.Log4j2;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Log4j2
@RestController
public class HelloController {

    @RequestMapping("/home")
    public String home() {

        log.error("Hi ! We have an Error. Hello World");

        return "Hello World ----spring-boot-log4j2";
    }
}

注意:如果 IDEA 报错(找不到log),IDEA 设置中添加 Lombok 插件,即可。

参考资料:

原文地址:https://www.cnblogs.com/xishuai/p/spring-boot-log4j2.html

时间: 2024-10-11 09:50:21

Spring Boot 使用 Log4j2的相关文章

spring boot整合Log4j2

1.找到第一个spring boot启动器,排除logging.jar包,让slf4j使用其他的log <exclusions> <!--排除logging--> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> <

Spring Boot 使用 Log4j2 &amp; Logback 输出日志到 EKL

文章目录 1.ELK 介绍 2.环境.软件准备 3.ELK 环境搭建 4.Spring Boot 配置示例 4.1.Log4j2 方式配置 4.2.Logback 方式配置 1.ELK 介绍 ELK 是 Elasticsearch , Logstash, Kibana 的缩写,Elasticsearch 是开源分布式搜索引擎,提供搜集.分析.存储数据等功能,Logstash 主要是用来日志的搜集.分析.过滤日志的工具,Kibana 为 Elasticsearch 提供分析和可视化的 Web 平台

spring boot 配置 log4j2

版本信息: spring cloud 版本Greenwich.SR2 spring boot 版本2.1.8.RELEASE 官网文档: ** http://logging.apache.org/log4j/2.x/manual/configuration.html ** 以下每个步骤不可缺失 pom.xml配置 需要排除spring-boot-starter自带的logback依赖,不然日志无法记录在日志文件里 <dependency> <groupId>org.springfr

Spring boot 配置 log4j2.xml

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> <version>RELEASE</version> </dependency> <!-- 解析yml--> <dependency> <groupId>com

spring boot 1.5.4 整合log4j2(十一)

上一篇:spring boot 1.5.4 定时任务和异步调用(十) Spring Boot整合log4j2 spring boot整合log4j2项目spring-boot-jsp源码: https://git.oschina.net/wyait/springboot1.5.4.git 1.1  log4j2概要 对于我们开发人员来说,日志记录往往不被重视.在生产环境中,日志是查找问题来源的重要依据.日志可记录程序运行时产生的错误信息.状态信息.调试信息和执行时间信息等多种多样的信息.可以在程

最全spring boot视频系列,你值得拥有

================================== 从零开始学Spring Boot视频 ================================== àSpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=400000000155061&utm_medium=share [截止到201

43. Spring Boot动态数据源(多数据源自动切换)【从零开始学Spring Boot】

[视频&交流平台] àSpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008&utm_campaign=commission&utm_source=400000000155061&utm_medium=share à SpringCloud视频 http://study.163.com/course/introduction.htm?courseId=1004638001&a

【串线篇】spring boot日志使用

一.默认配置 1.SpringBoot默认帮我们配置好了日志: //记录器 Logger logger = LoggerFactory.getLogger(getClass()); @Test public void contextLoads() { //System.out.println(); //日志的级别: //由低到高,trace<debug<info<warn<error //可以调整输出的日志级别:日志就只会在这个级别以以后的高级别生效 logger.trace(&q

Spring Boot基础5-日志配置-logback和log4j2

源码地址:https://github.com/roncoo/spring-boot-demo 支持日志框架:Java Util Logging, Log4J2 and Logback,默认是使用logback 配置方式:默认配置文件配置和引用外部配置文件配置 一. 默认配置文件配置(不建议使用:不够灵活,对log4j2等不够友好) #日志文件名,比如:roncoo.log,或者是 /var/log/roncoo.log logging.file=roncoo.log # 日志级别配置,比如: