我试图为我的api添加日志,但是我的代码中有一个关于方面的问题。
我的项目有折叠结构,经典结构控制器和服务。
com.surname.apiproject.sports
com.surname.apiproject.sports.SportController
com.surname.apiproject.sports.SportService
com.surname.apiproject.users
com.surname.apiproject.users.UserController
com.surname.apiproject.users.UserService我有下面的Spring。
@Around("execution(* com.fernandez.api.project.*.*(..))")
public void time(final ProceedingJoinPoint proceedingJoinPoint) throws Throwable {
long start = System.currentTimeMillis();
DateFormat df = DateFormat.getInstance();
SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm:ss.SSS");
String dateString = format.format(new Date());
String random = randomUUID();
Object value;
try {
value = proceedingJoinPoint.proceed();
} catch (Throwable throwable) {
throw throwable;
} finally {
long duration = System.currentTimeMillis() - start;
log.info("--- UUID3 --- : " + random + " --- Fecha ---" + dateString +" --- Camino --- :"+ proceedingJoinPoint.getSignature().getDeclaringType().getSimpleName() + " --Name --- " +proceedingJoinPoint.getSignature().getName());
}
}当我尝试执行请愿书时,我没有看到任何关于请愿的信息,但是如果我使用过滤器,我可以看到请愿,所以我不知道如果使用SpringAOP还是过滤器进行日志记录,哪种是最好的选择。
问候
发布于 2019-06-20 16:46:47
如果您的日志记录涉及servlet请求,则使用Filter。否则使用AOP。您还应该在费心计算所需时间之前检查是否启用了记录器,并使用日志API的格式而不是字符串连接。
如果前者,Spring已经收集了配置度量筛选器。的性能数据。你可能会发现这已经足够了。
对于更高级的性能跟踪,可以使用像弹性的或数据狗这样的APM代理。
第一个选项的示例
@Order(Ordered.HIGHEST_PRECEDENCE)
public class PerformanceLogFilter extends OncePerRequestFilter {
private static final DateTimeFormatter FORMAT
= DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss.SSS");
@Override
protected boolean shouldNotFilter(HttpServletRequest request) {
return !logger.isInfoEnabled();
}
@Override
protected void doFilterInternal(
HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain
) throws ServletException, IOException
{
Instant start = Instant.now();
try {
filterChain.doFilter(request, response);
} finally {
// N.B. commons-logging, not slf4j
logger.info(String.format("%s %s: %.1f ms",
start.atZone(ZoneId.systemDefault()).format(FORMAT),
request.getRequestURI(),
start.until(Instant.now(), ChronoUnit.MICROS) * 1e-3
));
}
}https://stackoverflow.com/questions/56690434
复制相似问题