本文通过展示你需要到位的配置步骤和一个使用log4j的示例应用程序,向你介绍在Spring Boot应用程序中使用Log4j。
开箱后,Spring Boot通过Logback配置日志,以INFO级别记录到控制台。在大多数情况下,这对管理你的应用程序是没有问题的,但是如果你决定宁愿使用Log4j或Log4j2,那么你需要改变你的依赖关系,以包括你想使用的日志实现的适当启动器,并排除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版本早于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初始化器。
然后,在你的应用程序中,引用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>
Log4j有一个默认的配置。因此,如果你不覆盖它,它将记录到控制台,显示归类为 "错误 "或更高的信息。
如果你使用该配置文件运行上述应用程序,启动时的日志信息将被打印在文件logs/application.log中。
源代码。你可以在这里下载Spring Boot with Log4j application的例子:https://github.com/fmarchioni/masterspringboot/tree/master/log/demo-log4j2
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : http://www.masterspringboot.com/configuration/logging/configuring-springboot-to-use-log4j
内容来源于网络,如有侵权,请联系作者删除!