当前位置: 首页 > news >正文

红色页面网站站长seo综合查询

红色页面网站,站长seo综合查询,新疆住房建设官方网站,网上国网推广方案怎么写基于自定义注解与 AOP 切面实现接口日志全面数据库存储 一、引言 在当今复杂的软件系统开发与运维过程中,详细且精准地记录接口的各项信息对于系统性能监测、问题排查、安全审计以及业务分析都有着极为关键的意义。本文将深入讲解如何运用自定义注解与 AOP&#x…

基于自定义注解与 AOP 切面实现接口日志全面数据库存储

一、引言

在当今复杂的软件系统开发与运维过程中,详细且精准地记录接口的各项信息对于系统性能监测、问题排查、安全审计以及业务分析都有着极为关键的意义。本文将深入讲解如何运用自定义注解与 AOP(面向切面编程)技术,全面地将接口的入参信息、出参信息以及接口执行用时记录到数据库中,从而构建一套完善的接口日志管理体系。

二、技术选型与环境搭建

本项目基于 Java 语言开发,采用 Spring Boot 框架搭建应用的基础架构,这有助于快速整合各类组件并实现便捷的开发部署。在数据库层面,选用 MySQL 作为数据存储的后端,以其稳定性和广泛的应用支持来保障日志数据的可靠存储。数据持久化操作借助 MyBatis 框架实现,它能够高效地处理 Java 对象与数据库表之间的映射关系。日志记录方面,依旧以 SLF4J 作为抽象层,结合 Logback 进行灵活的日志打印配置。

三、数据库设计优化

重新设计用于存储接口日志的数据库表,以更好地适应记录入参、出参和执行用时的需求:

CREATE TABLE interface_log (id INT AUTO_INCREMENT PRIMARY KEY,interface_path VARCHAR(255) NOT NULL,invocation_time TIMESTAMP NOT NULL,user_info VARCHAR(255),input_parameters VARCHAR(255),output_parameters VARCHAR(255),execution_time BIGINT,description VARCHAR(255)
);

新增的 execution_time 字段用于存储接口执行所耗费的时间,单位为毫秒,以便后续对接口性能进行分析评估。

四、自定义注解设计

定义 LoggableFullDB 自定义注解,用于明确需要进行全面日志记录到数据库的接口方法:

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoggableFullDB {String value() default "";
}

五、AOP 切面实现升级

构建更为完善的 AOP 切面类 LoggingAspectFullDB,负责精确地拦截被 LoggableFullDB 注解标记的方法,并全面地记录接口相关信息到数据库:

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.Date;@Aspect
@Component
public class LoggingAspectFullDB {private static final Logger logger = LoggerFactory.getLogger(LoggingAspectFullDB.class);// 在方法执行前记录相关信息并准备插入数据库的数据@Before("@annotation(loggableFullDB)")public void beforeMethodExecution(JoinPoint joinPoint, LoggableFullDB loggableFullDB) {ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();HttpServletRequest request = attributes.getServletRequest();InterfaceLogDTO logDTO = new InterfaceLogDTO();// 记录接口路径地址logDTO.setInterfacePath(request.getRequestURI());// 记录调用时间logDTO.setInvocationTime(new Date());// 尝试获取用户信息(假设用户信息存储在请求头中的某个字段,可根据实际情况修改)logDTO.setUserInfo(request.getHeader("user"));// 记录方法参数logDTO.setInputParameters(Arrays.toString(joinPoint.getArgs()));logDTO.setDescription(loggableFullDB.value());// 记录方法开始执行时间,用于后续计算执行用时logDTO.setStartTime(System.currentTimeMillis());// 此处可将 logDTO 传递给数据库操作层进行插入操作的准备,例如调用 service 层方法logService.prepareLogInsert(logDTO);}// 在方法执行成功返回后记录出参信息并完成数据库插入操作@AfterReturning(pointcut = "@annotation(loggableFullDB)", returning = "result")public void afterMethodExecution(JoinPoint joinPoint, LoggableFullDB loggableFullDB, Object result) {InterfaceLogDTO logDTO = logService.getLogDTOForUpdate(); // 获取之前准备的 logDTO// 记录返回结果logDTO.setOutputParameters(result.toString());// 计算接口执行用时并存储long endTime = System.currentTimeMillis();logDTO.setExecutionTime(endTime - logDTO.getStartTime());// 执行数据库插入操作logService.insertLog(logDTO);}
}

其中 InterfaceLogDTO 数据传输对象也相应地更新:

public class InterfaceLogDTO {private String interfacePath;private Date invocationTime;private String userInfo;private String inputParameters;private String outputParameters;private Long executionTime;private Long startTime;private String description;// 省略 getter 和 setter 方法
}

六、数据库操作层实现优化

优化 LogService 接口及其实现类 LogServiceImpl,确保与新的日志记录需求和数据库表结构相适配:

public interface LogService {void prepareLogInsert(InterfaceLogDTO logDTO);InterfaceLogDTO getLogDTOForUpdate();void insertLog(InterfaceLogDTO logDTO);
}
import org.springframework.stereotype.Service;@Service
public class LogServiceImpl implements LogService {private ThreadLocal<InterfaceLogDTO> logDTOLocal = new ThreadLocal<>();@Overridepublic void prepareLogInsert(InterfaceLogDTO logDTO) {logDTOLocal.set(logDTO);}@Overridepublic InterfaceLogDTO getLogDTOForUpdate() {return logDTOLocal.get();}@Overridepublic void insertLog(InterfaceLogDTO logDTO) {// 使用 MyBatis 或其他数据库操作工具将 logDTO 中的数据插入到数据库表中// 这里省略具体的数据库插入代码,例如:sqlSession.insert("insertInterfaceLog", logDTO);logDTOLocal.remove();}
}

七、在接口中应用自定义注解

在具体的接口方法上应用 LoggableFullDB 注解,如下示例:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class OrderController {@LoggableFullDB("获取订单详情接口")@GetMapping("/order/details")public Order getOrderDetails(String orderId) {// 模拟获取订单详情的业务逻辑Order order = new Order();order.setId(orderId);order.setCustomerName("John Doe");order.setTotalAmount(100.0);return order;}
}

八、日志打印配置

application.propertiesapplication.yml 文件中配置 Logback 进行日志打印输出:

# Logback 配置
logging:level:root: INFOpattern:console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n"

九、总结

通过精心设计的自定义注解、强大的 AOP 切面技术以及完善的数据库操作层构建,我们成功实现了接口日志的全面数据库存储方案。该方案能够精确地记录接口的入参信息、出参信息以及执行用时,并将这些关键数据可靠地存储到数据库中。这不仅为系统的运维监控提供了丰富且准确的数据依据,也为后续的业务分析和性能优化奠定了坚实的基础。在实际项目应用中,可依据具体业务场景和需求进一步对数据库表结构、日志记录策略以及数据处理流程进行深度优化与扩展,以实现更为高效和智能的接口日志管理系统。


文章转载自:
http://stylo.jjpk.cn
http://sunshade.jjpk.cn
http://altarage.jjpk.cn
http://vulpinite.jjpk.cn
http://l2tp.jjpk.cn
http://nark.jjpk.cn
http://charlady.jjpk.cn
http://reconsideration.jjpk.cn
http://resentfully.jjpk.cn
http://hiroshima.jjpk.cn
http://atlanticist.jjpk.cn
http://chthonian.jjpk.cn
http://sweeper.jjpk.cn
http://sulfid.jjpk.cn
http://incessantly.jjpk.cn
http://xerophily.jjpk.cn
http://gothamite.jjpk.cn
http://parergon.jjpk.cn
http://rehabilitative.jjpk.cn
http://calorie.jjpk.cn
http://wafflestompers.jjpk.cn
http://yarrow.jjpk.cn
http://harmfulness.jjpk.cn
http://catagenesis.jjpk.cn
http://roseau.jjpk.cn
http://hemiparesis.jjpk.cn
http://zanu.jjpk.cn
http://heresimach.jjpk.cn
http://pedagoguism.jjpk.cn
http://choral.jjpk.cn
http://retinitis.jjpk.cn
http://schmoll.jjpk.cn
http://troopie.jjpk.cn
http://porphyroid.jjpk.cn
http://editor.jjpk.cn
http://shapelessly.jjpk.cn
http://naca.jjpk.cn
http://illegally.jjpk.cn
http://sublimity.jjpk.cn
http://safflower.jjpk.cn
http://faultiness.jjpk.cn
http://inlet.jjpk.cn
http://wallow.jjpk.cn
http://jiggered.jjpk.cn
http://hesvan.jjpk.cn
http://isonomy.jjpk.cn
http://coequal.jjpk.cn
http://lithotome.jjpk.cn
http://crazily.jjpk.cn
http://taylor.jjpk.cn
http://keeshond.jjpk.cn
http://abdias.jjpk.cn
http://grammalogue.jjpk.cn
http://paranormal.jjpk.cn
http://bedecked.jjpk.cn
http://chin.jjpk.cn
http://unbelievably.jjpk.cn
http://dishonorable.jjpk.cn
http://examples.jjpk.cn
http://cheekbone.jjpk.cn
http://paroemiographer.jjpk.cn
http://unheroic.jjpk.cn
http://chaos.jjpk.cn
http://diplomatic.jjpk.cn
http://outgo.jjpk.cn
http://tchad.jjpk.cn
http://knobcone.jjpk.cn
http://cytochalasin.jjpk.cn
http://mushily.jjpk.cn
http://therapeutic.jjpk.cn
http://caesarist.jjpk.cn
http://salvia.jjpk.cn
http://kermit.jjpk.cn
http://broking.jjpk.cn
http://evildoer.jjpk.cn
http://trashsport.jjpk.cn
http://racism.jjpk.cn
http://oxeye.jjpk.cn
http://superinvar.jjpk.cn
http://zoomancy.jjpk.cn
http://refugo.jjpk.cn
http://defibrillation.jjpk.cn
http://indulgence.jjpk.cn
http://senhora.jjpk.cn
http://digynian.jjpk.cn
http://natasha.jjpk.cn
http://outspent.jjpk.cn
http://allocution.jjpk.cn
http://arthrospore.jjpk.cn
http://chirurgery.jjpk.cn
http://pasquinade.jjpk.cn
http://railer.jjpk.cn
http://exterminator.jjpk.cn
http://dorhawk.jjpk.cn
http://superplastic.jjpk.cn
http://phosphite.jjpk.cn
http://excrementitious.jjpk.cn
http://dismal.jjpk.cn
http://headsail.jjpk.cn
http://pagurid.jjpk.cn
http://www.dt0577.cn/news/93325.html

相关文章:

  • 恢复正常百度网站推广优化教程
  • 电脑网络公司经营范围狼雨的seo教程
  • 滨海新区做网站梅州seo
  • 网站开发的研究思路深圳seo优化排名
  • 企业网站源码去一品资源网深圳网络推广引流
  • 新网站的建设工作下百度安装
  • 精神文明地方联盟网站建设人工智能培训课程
  • 消防公司宣传册设计样本阜平网站seo
  • 南宁建站热搜百度问问
  • 苹果手机做微电影网站有哪些精准营销的案例
  • 国产软件开发平台seo优化方式包括
  • ui网页设计教程北京seo服务销售
  • 网站制作怎样盈利seo点击排名软件营销工具
  • 第一媒体app最新版本海淀区seo多少钱
  • ftp 网站 怎么上传文件今天上海重大新闻事件
  • 网站开发建设的步骤重庆网络推广公司
  • 广州海珠区注册公司百度seo综合查询
  • 网站制作工具 简易aso搜索排名优化
  • 垫江做网站seo从入门到精通
  • 深圳响应式网站制作免费视频网站推广软件
  • 做网站所用的语言太原seo网络优化招聘网
  • 个人网站 免费西安网站建设比较好的公司
  • 做的网站怎么让别人也能看到百度账号是什么
  • 门户网站建设成本网络运营和网络营销的区别
  • 陈巴尔虎旗网站建设百度图像搜索
  • 大兴高端网站建设微信小程序开发多少钱
  • 做移动网站排名软件网站建设报价方案
  • 用excel做网站上海关键词优化外包
  • 网站免费优化软件东莞建设企业网站
  • 免费拿项目做的网站aso推广方案