Spring Boot中配置Log4j

x33g5p2x  于2022-09-29 转载在 Spring  
字(3.8k)|赞(0)|评价(0)|浏览(809)

本文通过展示你需要到位的配置步骤和一个使用log4j的示例应用程序,向你介绍在Spring Boot应用程序中使用Log4j。

Spring Logging at high level

开箱后,Spring Boot通过Logback配置日志,以INFO级别记录到控制台。在大多数情况下,这对管理你的应用程序是没有问题的,但是如果你决定宁愿使用Log4jLog4j2,那么你需要改变你的依赖关系,以包括你想使用的日志实现的适当启动器,并排除Logback。
如果你使用Maven管理你的构建,你可以简单地排除Logback,方法是排除由根启动器依赖关系过渡解决的默认日志启动器。

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

在Gradle中,你可以把排除项放在配置部分。

configurations { 
   all*.exclude group:'org.springframework.boot', module:'spring-boot-starter-logging' 
}

在排除了默认的日志启动器后,你现在可以将你希望使用的日志实现的启动器纳入其中。通过Maven构建,你可以这样添加Log4j。

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

如果你使用Gradle构建,那么你可以像这样添加Log4j。

compile("org.springframework.boot:spring-boot-starter-log4j")

如果你想使用Log4j2,请将工件改为。

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

Spring Boot log4j2启动器对CVE-2021-44832是否安全?

如果你的Spring Boot版本早于v2.5.8,你就会使用有漏洞的Log4j2版本。为了保护您的应用程序免受CVE-2021-44832的影响,我们强烈建议您升级到最新的Spring Boot版本,该版本将接收Log4J v2.17.0。

如果你不能升级到最新的Spring Boot版本,你应该覆盖Spring Boot启动器中可用的log4j2版本。当使用Spring Boot父级POM时,相应地设置log4j2.version属性即可。

<properties>
    <log4j2.version>2.17.1</log4j2.version>
</properties>

在Spring Boot应用程序中使用Log4j2

现在你知道如何在Spring Boot应用程序中配置Log4j2了。在本节中,我们将演示如何在一个示例应用程序中使用这个库。

首先,用任何启动器创建一个应用程序,例如用Spring Boot初始化器。

然后,在你的应用程序中,引用org.apache.logging.log4j.LogManager类来获得当前类的记录器。例子。

import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;

@Component
public class CustomerRepository {
    List<Customer> customerList = new ArrayList<Customer>();
    private static final Logger logger = LogManager.getLogger(CustomerRepository.class);
    @PostConstruct
    public void init(){

        Customer c1 = new Customer(1, "frank");
        Customer c2 = new Customer(2, "john");

        customerList.add(c1);
        logger.debug("Added Customer : {}", () -> c1);
        customerList.add(c2);
        logger.debug("Added Customer : {}", () -> c2);
    }
    public List<Customer> getData() {
        return customerList;
    }
}

当你完成了你的应用程序,在你的资源文件夹中添加Log4j2配置文件,例如log4j2.xml文件。

<Configuration status="DEBUG">
    <Appenders>
        <Console name="LogToConsole" target="SYSTEM_OUT">
            <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
        </Console>
        <File name="LogToFile" fileName="logs/application.log">
            <PatternLayout>
                <Pattern>%d %p %c{1.} [%t] %m%n</Pattern>
            </PatternLayout>
        </File>
    </Appenders>
    <Loggers>
        <Logger name="com.example.demolog4j2" level="debug" additivity="false">
            <AppenderRef ref="LogToFile"/>
            <AppenderRef ref="LogToConsole"/>
        </Logger>
        <Logger name="org.springframework.boot" level="error" additivity="false">
            <AppenderRef ref="LogToConsole"/>
        </Logger>
        <Root level="error">
            <AppenderRef ref="LogToFile"/>
            <AppenderRef ref="LogToConsole"/>
        </Root>
    </Loggers>
</Configuration>
Log4j2没有配置文件?

Log4j有一个默认的配置。因此,如果你不覆盖它,它将记录到控制台,显示归类为 "错误 "或更高的信息。

如果你使用该配置文件运行上述应用程序,启动时的日志信息将被打印在文件logs/application.log中。

源代码。你可以在这里下载Spring Boot with Log4j application的例子:https://github.com/fmarchioni/masterspringboot/tree/master/log/demo-log4j2

相关文章