我试图在spring boot应用程序中添加log4j2框架,并使用spring AOP将日志记录问题与逻辑业务分离开来。不幸的是,当我尝试记录消息时,log4j2不起作用,它使用spring默认的日志记录。
这是我的LoggingAspect类,我尝试在其中记录消息:LoggingAspect。JAVA
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import org.springframework.util.StopWatch;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Aspect
@Component
public class LoggingAspect {
@Around("com.obs.dqsc.api.config.AspectConfig.businessService() || com.obs.dqsc.api.config.AspectConfig.repositoryOperations()")
public Object logMethod(final ProceedingJoinPoint joinPoint)
throws Throwable {
final Class<?> targetClass = joinPoint.getTarget().getClass();
final Logger logger = LoggerFactory.getLogger(targetClass);
try {
final String className = targetClass.getSimpleName();
logger.debug(getPreMessage(joinPoint, className));
final StopWatch stopWatch = new StopWatch();
stopWatch.start();
final Object retVal = joinPoint.proceed();
stopWatch.stop();
logger.debug(getPostMessage(joinPoint, className, stopWatch.getTotalTimeMillis()));
return retVal;
} catch (final Throwable ex) {
logger.error(getErrorMessage(ex), ex);
throw ex;
}
}
private static String getPreMessage(final JoinPoint joinPoint, final String className) {
final StringBuilder builder = new StringBuilder()
.append("Entered in ").append(className).append(".")
.append(joinPoint.getSignature().getName())
.append("(");
appendTo(builder, joinPoint);
return builder
.append(")")
.toString();
}
private static String getPostMessage(final JoinPoint joinPoint, final String className, final long millis) {
return "Exit from " + className + "." +
joinPoint.getSignature().getName() +
"(..); Execution time: " +
millis +
" ms;";
}
private static String getErrorMessage(final Throwable ex) {
return ex.getMessage();
}
private static void appendTo(final StringBuilder builder, final JoinPoint joinPoint) {
final Object[] args = joinPoint.getArgs();
for (int i = 0; i < args.length; i++) {
if (i != 0) {
builder.append(", ");
}
builder.append(args[i]);
}
}
}
这是我的pom。xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.5.5</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.obs.dqsc</groupId>
<artifactId>dqsc-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>api</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>16</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</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.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>5.0.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.0.0</version>
</dependency>
</dependencies>
<build>
<finalName>api-0.0.1-SNAPSHOT</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${project.parent.version}</version>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>
最后这是我的log4j2。xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<Configuration>
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{yyyy-MMM-dd HH:mm:ss} [%t] %-5level %-50c{1.} - %msg%n" />
</Console>
</Appenders>
<Loggers>
<Root level="debug">
<AppenderRef ref="Console" />
</Root>
</Loggers>
</Configuration>
当我尝试使用logger时也是如此。info()而不是logger。debug()它在控制台中打印一些内容,但带有。debug()它没有!(消息是使用spring默认日志打印的)
我的application.properties不包含与log4j相关的任何内容,我的log4j2.xml也在src/main/资源中
通过以下方式排除Spring Boot默认日志记录:
<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>
像你已经做的那样添加spring boot log4j2依赖项,你会没事的。因为您只在web模块上排除了日志模块,它仍然会被其他依赖项(例如data mongodb模块)拉入。
我已经调试了一整天,几乎尝试了互联网上所说的所有方法,但我仍然没有正确理解。 我使用Spring Boot和log4j2进行日志记录,因为我希望将日志写入文件而不是控制台。当我启动Spring Boot时,日志文件被成功创建,但我看不到文件上写着“Hello Philippine”。我希望你们能帮我。 这是我的Spring Boot应用程序: 我的log4j2。xml 我的POM: 我的申请表上没
我有一个简单的Spring Boot应用程序(在STS中创建为“starter project”)。我使用log4j2进行日志记录 无论我尝试什么,我都没有在交换中看到任何消息;我只在控制台中看到它们。 我成功地将log4j(1)与旧版本的org.springframework.amqp:spring-rabbit:1.5.6 AmqpAppender(org.springframework.am
我正在与Spring Boot一起使用JDBI。我遵循了本指南,这导致必须创建一个类:<code>JdbiConfig</code>,对于应用程序上下文中需要的每个dao,您必须添加: 我想知道Spring Boot是否有办法创建一个定制的处理器来创建beans并将它们放入应用程序上下文中。我有两个想法: 使用自定义注释注释DAO并编写一些东西来提取它们。我尝试过只是手动将这些注入到应用程序启动中
编写了简单的POC来证明和测试Spring Boot和log4j2的兼容性。一旦成功,我将把它移动到真正的应用程序。 请参考下面的maven依赖关系(来自POC): 如果我不排除Spring的logback,也不添加boot-starter-log4j2,那么应用程序日志会打印到应用程序文件中,但Spring日志根本不会打印。我感觉到了依赖的问题。感谢任何帮助。
我正在尝试提供从log4j2到Spring Boot执行器日志。不幸的是,我只实现了如何为根记录器更改日志级别。也许有人知道如何连接执行器与log4j2?
我使用的是Spring boot 1.3.6.Release和,如下所示: 以下代码的日志记录工作正常。 但是当我升级到Spring Boot1.4.3.发布时,记录器不工作了。 升级到1.4.3后我的新build.gradle是(只是一个版本更改)