框架模块说明 #09 日志模块_02

背景

        上篇我们介绍了系统日志处理方式,也结合我们实际和日志系统集成的需求,将我们的日志文件配置成json格式。这次我们针对我们操作日志的处理进行一些介绍。

        还是采用传统的aop的形式进行操作日志的保存,并按业务类型进行定义保存到mongodb的日志里,并根据系统的配置的日志最大保留天数通过quartz的定时任务定时清理mondb的数据数据。

类图

日志注解类

日志注解类代码如下,是一个很常用的注解类。所以这里加点知识,就是Retention注解的策略的知识。

@Retention 注解用于标记另一个注解,指示该注解应该在什么时候被保留。它的作用是定义注解在不同生命周期阶段的可用性。@Retention 接受一个枚举值 RetentionPolicy,可以选择以下三种策略之一:

  • RetentionPolicy.SOURCE:注解仅存在于源代码中,编译时被丢弃。它在编译后不会存在于字节码中。
  • RetentionPolicy.CLASS:注解会保留在编译后的 .class 文件中,但不会被 JVM 加载,通常用于编译时的工具(如代码生成工具)。
  • RetentionPolicy.RUNTIME:注解会在运行时被保留,并且可以通过反射机制在程序执行期间访问到它。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD) //只能注解到方法
public @interface AuthLog {//业务类型String bizType();//接口描述String desc();CoreConstant.OperateLogType operateLogType() default CoreConstant.OperateLogType.LOG_TYPE_DEFAULT;
}

日志切面类

OperateLogAspect日志切面类用于拦截日志并将日志数据保存到mongodb,我们会将如下的内容记录到日志文件中并进行简单的脱敏的处理。

        doc.append("type", operateLogType.getLogType());doc.append("uri", uri);doc.append("reqIp", ip);doc.append("reqMethod", request.getMethod());doc.append("reqParams", SensitiveDataUtil.handler.maskSensitiveData(JSONUtil.toJsonStr(request.getParameterMap())));doc.append("reqHeader", getHeadersAsJson(request));

定时清理类

MongoDbLogJobCleaner负责清理超期的日志,默认保留的是30天,由于在quartz-common包里,所以只要微服务都会引用这个基础的底包,这样就会读取到每个服务的日志文件并进行清理了。

       try {documentName = microServiceName + MongoDbLogConfig.MONGODB_OPERATE_LOG_SUFFIX.value();Query query = new Query(Criteria.where(MongoDbLogConfig.CREATE_DATE_FIELD.value()).lt(new Date(System.currentTimeMillis() - expireDays * 24 * 60 * 60 * 1000)));DeleteResult deleteResult = mongoTemplate.remove(query, documentName);logger.info("清除[" + documentName + "]操作日志成功,清理结果为::" + JSON.toJSONString(deleteResult));} catch (Exception e) {logger.error("清除[" + documentName + "]操作日志失败,{}", e.getMessage());}

日志查询

MongodbOperateLogController提供了一些查询功能,这里就不在详细描述。重点还是mongodb的查询

总结

这两篇文章基本介绍了框架的日志体系,我们没有对接ELK的类似的日志系统,而是采用了mongodb这种方式,主要考虑到小公司可能对基础设施的投入并不会那么大的问题。未来要引用ELK,我觉得也是非常容易的事情。请大家多指正。

GitCode - 全球开发者的开源社区,开源代码托管平台GitCode是面向全球开发者的开源社区,包括原创博客,开源代码托管,代码协作,项目管理等。与开发者社区互动,提升您的研发效率和质量。https://gitcode.com/YouYouLongLong/springcloud-framework/blob/master/core-common-parent/logs-common/src/main/java/org/cloud/logs/aop/OperateLogAspect.java

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/71077.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek-R1自写CUDA内核跑分屠榜:开启GPU编程自动化新时代

引言 在AI领域,深度学习模型的性能优化一直是研究者们关注的核心。最近,斯坦福和普林斯顿的研究团队发现,DeepSeek-R1生成的自定义CUDA内核不仅超越了OpenAI的o1和Claude 3.5 Sonnet,还在KernelBench框架中取得了总排名第一的好成…

记Android12上一个原生bug引起的system_server crash

欢迎使用Markdown编辑器 一. 现象描述 近日测试上报一个几乎必现的crash,描述如下: 现象: launcher编辑状态与锁屏解锁交互时系统概率性重启 操作步骤: 进入launcher组件编辑状态按电源键灭屏后亮屏,锁屏界面上滑解锁launcher编辑状态向右或向左滑动重…

系统架构设计师—计算机基础篇—计算机体系结构

文章目录 计算机硬件分级存储体系目的特点 硬件组成CPU运算器控制器 主存储器 指令系统流水线 内存按字节编址磁盘阵列 计算机硬件 分级存储体系 寄存器组(CPU)Cache(内存)主存Flash(外存/辅存) 目的 解…

Qt基于等待条件QWaitCondition实现的任务队列模型示例

核心概念 Qt中的QWaitCondition是一个用于多线程同步的类,允许线程在某些条件满足时唤醒其他等待的线程。它通常与QMutex配合使用,协调线程之间的执行顺序,适用于生产者-消费者模型、任务队列调度等场景。 ​wait():使当前线程进…

JAVA实战开源项目:安康旅游网站(Vue+SpringBoot) 附源码

本文项目编号 T 098 ,文末自助获取源码 \color{red}{T098,文末自助获取源码} T098,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

《Qt动画编程实战:轻松实现头像旋转效果》

《Qt动画编程实战:轻松实现头像旋转效果》 Qt 提供了丰富的动画框架,可以轻松实现各种平滑的动画效果。其中,旋转动画是一种常见的 UI 交互方式,广泛应用于加载指示器、按钮动画、场景变换等。本篇文章将详细介绍如何使用 Qt 实现…

基于 MyBatis-Plus 的多租户数据隔离方案

​什么是多租户? 多租户技术(Multi-Tenancy)是一种软件架构设计,允许多个用户(通常为企业或组织)共享同一套系统或应用程序,同时确保各用户之间的数据隔离。这种技术广泛应用于 SaaS(软件即服务)平台,能够有效降低运维成本,提高资源利用率。 核心思想:在一台服务…

8 SpringBootWeb(下):登录效验、异步任务和多线程、SpringBoot中的事务管理@Transactional

文章目录 案例-登录认证1. 登录功能1.1 需求1.2 接口文档1.3 思路分析1.4 功能开发1.5 测试2. 登录校验2.1 问题分析2.2 会话技术2.2.1 会话技术介绍2.2.2 会话跟踪方案2.2.2.1 方案一 - Cookie2.2.2.2 方案二 - Session2.2.2.3 方案三 - 令牌技术2.2.3 JWT令牌(Token)2.2.3.…

mysql系列10—mysql锁

背景 mysql中锁机制核心是保证数据的一致性以及并发控制。锁机制的实现与存储引擎有关,本文介绍的是INNODB存储引擎的锁机制;其他存储引擎如myISAM和memory等仅支持表锁不支持行锁,不是本文关注的重点。 本文介绍mysql数据库提供的锁机制&am…

Redis7——基础篇(八)

前言:此篇文章系本人学习过程中记录下来的笔记,里面难免会有不少欠缺的地方,诚心期待大家多多给予指教。 基础篇: Redis(一)Redis(二)Redis(三)Redis&#x…

《国密算法开发实战:从合规落地到性能优化》

前言 随着信息技术的飞速发展,信息安全已成为全球关注的焦点。在数字化时代,数据的保密性、完整性和可用性直接关系到国家、企业和个人的利益。为了保障信息安全,密码技术作为核心支撑,发挥着至关重要的作用。国密算法,即国家密码算法,是我国自主设计和推广的一系列密码…

yolov12 部署瑞芯微 rk3588、RKNN 部署工程难度小、模型推理速度快

yolov12 部署又来了。 特别说明:如有侵权告知删除,谢谢。 完整代码:包括onnx转rknn和测试代码、rknn板端部署C代码: 【onnx转rknn和测试代码】 【rknn板端部署C代码】 1 模型训练 yolov12训练官方开源的已经非常详细了&#…

windows本地化部署Dify+Deepseek

Windows本地化部署DifyDeepseek 一、下载Docker 前往 Docker 官网 下载 Docker Desktop,按序安装。 1.1启用WSL 打开本机的控制面板>程序>启用或关闭 Windows 功能,勾选: Linux 的 Windows 子系统虚拟机平台(若无该选择则勾选 Hyper-V &#…

使用Spring Boot与达梦数据库(DM)进行多数据源配置及MyBatis Plus集成

使用Spring Boot与达梦数据库(DM)进行多数据源配置及MyBatis Plus集成 在现代企业级应用开发中,处理多个数据源是一个常见的需求。本文将详细介绍如何使用Spring Boot结合达梦数据库(DM),并通过MyBatis Plus来简化数据库操作&…

第二十四:5.2【搭建 pinia 环境】axios 异步调用数据

第一步安装&#xff1a;npm install pinia 第二步&#xff1a;操作src/main.ts 改变里面的值的信息&#xff1a; <div class"count"><h2>当前求和为&#xff1a;{{ sum }}</h2><select v-model.number"n">  // .number 这里是…

使用 DeepSeek 生成流程图、甘特图与思维导图:结合 Typora 和 XMind 的高效工作流

在现代工作与学习中&#xff0c;可视化工具如流程图、甘特图和思维导图能够极大地提升信息整理与表达的效率。本文将详细介绍如何使用 DeepSeek 生成 Mermaid 文本&#xff0c;结合 Typora 快速生成流程图和甘特图&#xff0c;并通过 Markdown 格式生成思维导图&#xff0c;最终…

DeepSeek 开源周:第五天 - Fire-Flyer 文件系统(3FS)

&#xff08;下面文字主要由 Grok 3 协助生成&#xff09; 概述 Deepseek 今天开源的 Fire-Flyer 文件系统&#xff08;3FS&#xff09;是一个高性能分布式文件系统&#xff0c;专门为 AI 训练和推理设计。研究表明&#xff0c;它解决了 AI 工作负载中处理海量数据的高效存储需…

【笔记】论文阅读方法(AI大模型)

1 为什么读论文 构建知识体系&#xff1a;通过Related Works快速了解该方向研究现状&#xff0c;追踪经典论文 紧跟前沿技术&#xff1a;了解领域内新技术及效果&#xff0c;快速借鉴到自身项目 培养科研逻辑&#xff1a;熟悉论文体系&#xff0c;了解如何创造新事物&#x…

【数据集】ACM数据集

ACM&#xff08;Association for Computing Machinery&#xff09;数据集是计算机科学领域常用于研究学术论文、作者关系、引文网络、推荐系统、图神经网络&#xff08;GNN&#xff09;等任务的数据集之一。该数据集通常包含学术论文、作者、研究领域以及它们之间的关系&#x…

SQL server配置ODBC数据源(本地和服务器)

本地配置 1. 控制面板中找到系统ODBC数据源&#xff08;打开控制面板直接搜&#xff09; 2. 选择“系统DSN”&#xff0c;点击“添加” 3. 选择“SQL server” 4. 名称和描述自己填&#xff0c;服务器选择本机设备名称 5. 选择ID和密码验证&#xff0c;并填写本地SQL server登…