SpringBoot集成Log4j2

 Apache Log4j2是对Log4j的升级,它比其前身Log4j 1.x提供了重大改进,并提供了Logback中可用的许多改进,同时修复了Logback架构中的一些问题,所以选择log4j2。

1、SpringBoot 框架默认使用的LogBack日志。如果使用log4j2,需求排除spring-boot-starter中的spring-boot-starter-logging,同时引入spring-boot-starter-log4j2。

pom.xml

<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>

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

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

2、​application.yml

logging:
  level:
    com.example.service.mapper: debug

3、log4j2.xml,SpringBoot会自动加载log4j2.xml文件。

<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
    <!--<Configuration status="WARN" monitorInterval="30"> -->
    <properties>
        <property name="LOG_LEVEL">info</property>
        <property name="LOG_HOME">./logs</property>
        <!--<property name="PATTERN">[trace_id=%X{trace_id}] [%d{yyyy-MM-dd HH:mm:ss:SSS}{GMT+8}][%5p][%20c][- %l - %m] %n</property>-->
        <property name="PATTERN">[%d{yyyy-MM-dd HH:mm:ss:SSS}{GMT+8}][%5p][%20c][- %l - %m] %n</property>
    </properties>
    <Appenders>
        <!--*********************控制台日志***********************-->
        <Console name="consoleAppender" target="SYSTEM_OUT">
            <!--设置日志格式及颜色-->
            <PatternLayout
                    pattern="%style{%d{ISO8601}}{bright,green} %highlight{%-5level} [%style{%t}{bright,blue}] %style{%C{}}{bright,yellow}: %msg%n%style{%throwable}{red}"
                    disableAnsi="false" noConsoleNoAnsi="false"/>
        </Console>

        <!--*********************文件日志***********************-->
        <!--all级别日志-->
        <RollingFile name="allFileAppender"
                     fileName="${LOG_HOME}/all.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/all-%d{yyyy-MM-dd}-%i.log.gz">
            <!--输出日志的格式-->
            <PatternLayout pattern="${PATTERN}"/>
            <Policies>
                <!-- 设置日志文件切分参数 -->
                <!--<OnStartupTriggeringPolicy/>-->
                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
                <SizeBasedTriggeringPolicy size="100 MB"/>
                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
            <DefaultRolloverStrategy max="100"/>
        </RollingFile>

        <!--debug级别日志-->
        <RollingFile name="debugFileAppender"
                     fileName="${LOG_HOME}/debug.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/debug-%d{yyyy-MM-dd}-%i.log.gz">
            <Filters>
                <!--过滤掉info及更高级别日志-->
                <ThresholdFilter level="info" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <!--输出日志的格式-->
            <PatternLayout pattern="${PATTERN}"/>
            <Policies>
                <!-- 设置日志文件切分参数 -->
                <!--<OnStartupTriggeringPolicy/>-->
                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
                <SizeBasedTriggeringPolicy size="100 MB"/>
                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
            <DefaultRolloverStrategy max="100"/>
        </RollingFile>

        <!--info级别日志-->
        <RollingFile name="infoFileAppender"
                     fileName="${LOG_HOME}/info.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/info-%d{yyyy-MM-dd}-%i.log.gz">
            <Filters>
                <!--过滤掉warn及更高级别日志-->
                <ThresholdFilter level="warn" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <!--输出日志的格式-->
            <PatternLayout pattern="${PATTERN}"/>
            <Policies>
                <!-- 设置日志文件切分参数 -->
                <!--<OnStartupTriggeringPolicy/>-->
                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
                <SizeBasedTriggeringPolicy size="100 MB"/>
                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
                <TimeBasedTriggeringPolicy interval="1" modulate="true"/>
            </Policies>
            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
            <!--<DefaultRolloverStrategy max="100"/>-->
        </RollingFile>

        <!--warn级别日志-->
        <RollingFile name="warnFileAppender"
                     fileName="${LOG_HOME}/warn.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/warn-%d{yyyy-MM-dd}-%i.log.gz">
            <Filters>
                <!--过滤掉error及更高级别日志-->
                <ThresholdFilter level="error" onMatch="DENY" onMismatch="NEUTRAL"/>
            </Filters>
            <!--输出日志的格式-->
            <PatternLayout pattern="${PATTERN}"/>
            <Policies>
                <!-- 设置日志文件切分参数 -->
                <!--<OnStartupTriggeringPolicy/>-->
                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
                <SizeBasedTriggeringPolicy size="100 MB"/>
                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
            <DefaultRolloverStrategy max="100"/>
        </RollingFile>

        <!--error及更高级别日志-->
        <RollingFile name="errorFileAppender"
                     fileName="${LOG_HOME}/error.log"
                     filePattern="${LOG_HOME}/$${date:yyyy-MM}/error-%d{yyyy-MM-dd}-%i.log.gz">
            <!--输出日志的格式-->
            <PatternLayout pattern="${PATTERN}"/>
            <Policies>
                <!-- 设置日志文件切分参数 -->
                <!--<OnStartupTriggeringPolicy/>-->
                <!--设置日志基础文件大小,超过该大小就触发日志文件滚动更新-->
                <SizeBasedTriggeringPolicy size="100 MB"/>
                <!--设置日志文件滚动更新的时间,依赖于文件命名filePattern的设置-->
                <TimeBasedTriggeringPolicy/>
            </Policies>
            <!--设置日志的文件个数上限,不设置默认为7个,超过大小后会被覆盖;依赖于filePattern中的%i-->
            <DefaultRolloverStrategy max="100"/>
        </RollingFile>
    </Appenders>

    <Loggers>
        <!-- 根日志设置 -->
        <Root level="INFO">
            <AppenderRef ref="allFileAppender" level="all"/>
            <AppenderRef ref="consoleAppender" level="debug"/>
            <AppenderRef ref="debugFileAppender" level="debug"/>
            <AppenderRef ref="infoFileAppender" level="info"/>
            <AppenderRef ref="warnFileAppender" level="warn"/>
            <AppenderRef ref="errorFileAppender" level="error"/>
        </Root>

        <!-- 报日志监听 -->
        <Logger name="org.springframework" level="${LOG_LEVEL}"/>
        <Logger name="io.netty" level="${LOG_LEVEL}"/>
        <Logger name="org.apache" level="${LOG_LEVEL}"/>
        <Logger name="org.hibernate" level="${LOG_LEVEL}"/>
        <Logger name="druid.sql.Statement" level="${LOG_LEVEL}"/>
        <Logger name="org.mybatis" level="${LOG_LEVEL}"/>
        <Logger name="com.baomidou.mybatisplus" level="${LOG_LEVEL}"/>
        <Logger name="org.hibernate" level="${LOG_LEVEL}"/>
        <Logger name="org.quartz" level="${LOG_LEVEL}"/>

        <!--关闭如下包的日志信息-->
        <Logger name="springfox" level="OFF"/>

    </Loggers>

</Configuration>

 4、代码中使用

1)使用log4j api

// Logger和LogManager导入的是org.apache.logging包
private static final Logger logger = LogManager.getLogger(UserController.class);

2)使用slf4j,slf4j是对所有日志框架制定的一种规范、标准、接口,并不是一个框架的具体的实现,它的接口并不能独立使用,需要和具体的日志框架实现配合使用(如log4j、logback、log4j2)。

// Logger和LoggerFactory导入的是org.slf4j包
private static final Logger logger = LoggerFactory.getLogger(UserController.class);

3)使用 lombok的@Slf4j注解,lombok插件会将Slf4j注解 翻译成 private static final org.slf4j.Logger logger = LoggerFactory.getLogger(this.XXX.class);

import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@Slf4j
public class ServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(ServiceApplication.class, args);
        log.info("日志测试");
    }
}

5、单元测试里使用

@Slf4j
public class MyTest {

     @Test
     public void testLog4j2() {
        log.info("info");
        log.warn("warn");
        log.error("error");
    }
}

  • 9
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Spring Boot集成Log4j2可以通过以下步骤实现: 1. 在pom.xml文件中添加Log4j2依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> ``` 2. 在src/main/resources目录下创建log4j2.xml文件,并配置日志输出格式、级别等信息。例如: ``` <?xml version="1." encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console"/> </Root> </Loggers> </Configuration> ``` 3. 在Spring Boot应用程序中使用Log4j2进行日志记录。例如: ``` import org.slf4j.Logger; import org.slf4j.LoggerFactory; @RestController public class HelloController { private static final Logger logger = LoggerFactory.getLogger(HelloController.class); @GetMapping("/hello") public String hello() { logger.info("Hello, World!"); return "Hello, World!"; } } ``` 以上就是Spring Boot集成Log4j2的简单步骤。 ### 回答2: Spring Boot集成Log4j2非常简单。首先,我们需要在项目的pom.xml文件中添加以下依赖项: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.apache.logging.log4j</groupId> <artifactId>log4j-spring-boot-starter</artifactId> <version>2.17.1</version> </dependency> ``` 在添加了这些依赖项后,我们需要在src/main/resources目录下创建一个log4j2.xml文件,用于配置Log4j2的日志输出。 ```xml <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" /> </Console> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console" /> </Root> </Loggers> </Configuration> ``` 此配置将日志输出到控制台,并包含时间戳、线程信息、日志级别、日志类名和消息。 最后,在Spring Boot的主类上添加`@EnableAutoConfiguration`注解,启用自动配置。 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; @EnableAutoConfiguration @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` 现在,当您运行Spring Boot应用程序时,您将看到日志输出到控制台。您可以将log4j2.xml中的配置根据您的需求进行修改,例如将日志输出到文件或其他地方。 希望以上解答对您有帮助! ### 回答3: Spring Boot集成Log4j2可以通过以下几个步骤完成: 1. 引入依赖:在项目的pom.xml文件中,添加Log4j2的依赖。可以通过以下方式添加: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-log4j2</artifactId> </dependency> ``` 2. 配置Log4j2:在项目的resources目录下,创建一个名为log4j2.xml的文件,并配置Log4j2的相关选项。可以参考Log4j2的官方文档进行配置。 3. 在Spring Boot应用中使用Log4j2:在需要记录日志的类中,引入Log4j2的Logger类,并使用Logger进行日志记录。例如: ```java import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; ... public class MyService { private static final Logger logger = LogManager.getLogger(MyService.class); public void doSomething() { logger.info("Doing something..."); } } ``` 这样,当调用MyService类的doSomething方法时,日志会被记录下来,根据log4j2.xml中的配置,可以将日志输出到指定的地方,如控制台、文件等。 完成以上步骤后,Spring Boot就成功集成Log4j2,并可以开始使用Log4j2记录日志了。通过Log4j2,我们可以更方便地管理和配置日志,以及对日志进行更灵活的输出控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值