【发布时间】:2021-10-04 20:49:27
【问题描述】:
我已经使用spring boot和AOP创建了一个用于自动记录的jar文件,现在我已经在其他spring boot项目中添加了jar,并且jar被添加到maven依赖中,但它没有记录任何东西。
我正在从属性文件中获取基本包名称,并在我的 AOP 项目(我创建的 jar)中使用 xml 配置访问它。
这里是 AOP 代码
@Aspect
@Component
public class LoggingAdvice {
private LogDetails logDetails = new LogDetails();
Logger log = LoggerFactory.getLogger(LoggingAdvice.class);
public Object logger(ProceedingJoinPoint pjp) throws Throwable {
ObjectMapper mapper = new ObjectMapper();
Instant start = Instant.now();
Object[] array = pjp.getArgs();
Object object = pjp.proceed();
Instant end = Instant.now();
long timeTaken = Duration.between(start, end).toMillis();
logDetails.setServiceName(pjp.getSignature().getName());
logDetails.setTimeStamp(new SimpleDateFormat("mm:ss:SSS").format(new Date(timeTaken)));
logDetails.setMessage(pjp.getTarget().getClass().toString() + ", Method:-> " + pjp.getSignature().getName()
+ ", Arguments:-> " + mapper.writeValueAsString(array));
log.info(mapper.writeValueAsString(logDetails));
return object;
}
}
这是xml文件,我从属性文件中获取基础包
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
https://www.springframework.org/schema/aop/spring-aop.xsd">
<bean id="LoggingAdvice"
class="com.cerner.generic.logger.advice.LoggingAdvice"></bean>
<aop:config>
<aop:aspect id="logallaspect" ref="LoggingAdvice">
<!-- @Around -->
<aop:pointcut id="logAllMethodsAround"
expression="within(${base.package}..*)" />
<aop:around method="logger"
pointcut-ref="logAllMethodsAround" />
<!-- @After-Throwing -->
<aop:after-throwing
pointcut-ref="logAllMethodsAround" throwing="e"
method="afterThrowing" />
</aop:aspect>
</aop:config>
</beans>
这就是在其他项目中添加这个jar的方式,基本上它应该产生日志,但它没有产生。
<dependency>
<groupId>com.cerner.generic</groupId>
<artifactId>logger</artifactId>
<version>0.0.1-SNAPSHOT</version>
<scope>runtime</scope>
</dependency>
【问题讨论】:
-
你确认
LoggingAdvicebean 是否正在创建? -
是的日志记录建议单独工作正常,但在将其作为 jar 包含在其他应用程序中后,它没有记录
-
添加为依赖项后,确认
LoggingAdvicebean 是否正在注册到应用程序上下文。 -
那该怎么做?
-
这是你首先要解决的问题。您需要将
LoggingAdvice注册为具有应用程序上下文的bean。通过ComponentScan或其他方式
标签: spring-boot jar aop