AOP实现自动化日志记录,并将日志记录到es中

ops/2024/9/24 10:18:34/

在实际开发当中,日志记录是非常有必要的。将日志记录和业务逻辑解耦,可以引入日志框架(如 SLF4J + Logback)并结合 AOP 实现自动化日志记录。

 引入依赖

<dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version>1.7.30</version>
</dependency>
<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.2.3</version>
</dependency>
<dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId><version>7.10.1</version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

配置 Logback

创建或更新 src/main/resources/logback.xml 文件:

<configuration><appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern></encoder></appender><logger name="com.yourpackage" level="DEBUG"><appender-ref ref="CONSOLE" /></logger><root level="INFO"><appender-ref ref="CONSOLE" /></root>
</configuration>

创建 AOP 日志切面

使用 AOP 创建一个日志切面,用于记录方法的输入和输出日志,并将日志保存到 Elasticsearch:

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;@Aspect
@Component
public class LoggingAspect {private static final Logger logger = LoggerFactory.getLogger(LoggingAspect.class);@Autowiredprivate ElasticsearchService elasticsearchService;@Around("execution(* com.yourpackage..*.*(..))")public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {long start = System.currentTimeMillis();Object proceed = joinPoint.proceed();long executionTime = System.currentTimeMillis() - start;logger.info("Method {} executed in {} ms", joinPoint.getSignature(), executionTime);// 保存日志到ESelasticsearchService.saveLog(joinPoint.getSignature().toString(), executionTime);return proceed;}
}

创建 Elasticsearch 服务

创建一个服务类,用于处理与 Elasticsearch 的交互:

import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.HashMap;
import java.util.Map;@Service
public class ElasticsearchService {@Autowiredprivate RestHighLevelClient client;public void saveLog(String methodSignature, long executionTime) {Map<String, Object> logEntry = new HashMap<>();logEntry.put("method", methodSignature);logEntry.put("executionTime", executionTime);logEntry.put("timestamp", System.currentTimeMillis());IndexRequest request = new IndexRequest("logs");request.source(logEntry);try {client.index(request);} catch (Exception e) {e.printStackTrace();}}
}

配置 Elasticsearch 客户端

在 application.properties 或 application.yml 中配置 Elasticsearch 连接信息:

spring.elasticsearch.rest.uris=http://localhost:9200

可视化日志数据

使用 Kibana 等工具连接到 Elasticsearch,可以实时查看存储的日志数据。

总结

  1. 日志记录: 使用 SLF4J 和 Logback 进行日志记录。
  2. AOP: 使用 AOP 记录方法执行时间及相关信息,并将日志发送到 Elasticsearch。
  3. Elasticsearch: 使用 Elasticsearch 存储和查询日志,配合 Kibana 实现可视化。
  4. 优化: 通过引入 AOP,可以实现统一的日志记录逻辑,减少代码重复,方便管理。

http://www.ppmy.cn/ops/115234.html

相关文章

基于单片机与 PC 机通信的数据采集控制系统设计

摘 要 : 设计出基于单片机与 PC 机通信的数据采集控制系统方法 。 被控对象经传感器 、 电压变换电路 、 A/D 转换芯片与单片机相连, 可将现场参数信息传送至单片机 ; 单片机经继电器驱动控制被控对象运行 。 单片机与 PC 机经电平转换芯片相连, 实现远程通信功能 。…

(自用复习题)常微分方程01

题目来源 常微分方程(第四版) (王高雄,周之铭,朱思铭,王寿松) 高等教育出版社 书中习题1.2 5.求下列两个微分方程的公共解 y ′ y 2 2 x − x 4 , y ′ 2 x x 2 x 4 − y − y 2 yy^22x-x^4,y2xx^2x^4-y-y^2 y′y22x−x4,y′2xx2x4−y−y2 两方程的公共解满足 y 2 2 x…

华为HarmonyOS灵活高效的消息推送服务(Push Kit) -- 7 推送卡片刷新消息

场景介绍 如今衣食住行娱乐影音应用占据了大多数人的手机&#xff0c;一部手机可以满足日常大多需求&#xff0c;但对需要经常查看或进行简单操作的应用来说&#xff0c;总需要用户点开应用体验较繁琐。针对此种场景&#xff0c;HarmonyOS提供了Form Kit&#xff08;卡片开发服…

MATLAB中的无线通信系统测试和验证方法有哪些

在MATLAB中&#xff0c;无线通信系统的测试和验证是一个全面的过程&#xff0c;它涉及到信号处理、调制与解调、信道建模、误码率分析以及无线通信标准的实现。以下是一些关键的测试和验证方法&#xff1a; 信道建模&#xff1a;为了模拟真实的通信环境&#xff0c;MATLAB提供了…

C++之STL—string容器

本质&#xff1a;类 class 封装了很多方法&#xff1a;查找find&#xff0c;拷贝copy&#xff0c;删除delete 替换replace&#xff0c;插入insert 构造函数 赋值操作 assign&#xff1a; 字符串拼接 &#xff0b; append&#xff1a; string查找和替换 没查找到&#xff0c;po…

CCRC-DSA数据安全评估师:数据安全架构是什么?

架构不仅是抽象的概念&#xff0c;更是项目规划、系统开发、产品部署和安全增强中必不可少的思维模式、沟通桥梁和共享语言。 简言之&#xff0c;它定义了系统中包含的元素及其相互关系&#xff0c;这些元素被称为组件或逻辑模块。 例如&#xff0c;“组件”指独立存在的基础…

MySQL record 07 part

索引 注意&#xff0c;是排序&#xff0c;有序就会加快查找的速度。 优势&#xff1a; 劣势 索引会单独占用存储空间索引虽然可以提高排序和查找的速度&#xff0c;但同时也会降低更新、删除、新增数据的速度&#xff0c;因为MySQL此时既要更改表&#xff0c;也要维护更改表后…

防火墙详解(三)华为防火墙基础安全策略配置(命令行配置)

实验要求 根据实验要求配置防火墙&#xff1a; 合理部署防火墙安全策略以及安全区域实现内网用户可以访问外网用户&#xff0c;反之不能访问内网用户和外网用户均可以访问公司服务器 实验配置 步骤一&#xff1a;配置各个终端、防火墙端口IP地址 终端以服务器为例&#xff…