框架模塊說明 #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.pswp.cn/web/71077.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71077.shtml
英文地址,請注明出處:http://en.pswp.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登…