亞廈-日誌表的管理

前言

由於ERP項目中沒有可視化的日誌管理,配置一些開源的日誌系統又會佔用一些服務器資源,因此想模塊化的處理系統的運行日誌,該日誌只記錄各模塊的運行日誌,不需要記錄所有的系統日誌(記錄全部則會影響性能)。由於各模塊的運行日誌相對整個系統的日誌來說較少,對系統性能的影響較小,因此開發該模塊是可行的。

老版本

由於考慮到非侵入式,先看一下之前的日誌配置。
採用logback

發現採用的是logback日誌。
但是仔細看完代碼後發現用到的logger對象卻有兩個(即,不同的類總共用到了兩種不同的logger類)

import org.apache.log4j.Logger;
import org.slf4j.Logger;

即log4j 和 slf4j這兩種。
甚至有些的在引用的時候,出現了下列用法(log4j的情況),這樣會導致每個實例都會創建一個日誌對象(不好)

private Logger logger = Logger.getLogger( getClass() );//用法有點問題

正確的應該建一個靜態變量,歸屬於該類,而不是每個實例,如下(使用slf4j的情況):

private static Logger logger = LoggerFactory.getLogger(CurrentClass.class);

(注意:獲取日誌對象時,log4j,使用的是Logger.getLogger; 而slf4j,使用的是LoggerFactory.getLogger)

看完上述情況,感覺日誌使用比較混亂,所以接下來打算統一使用一種:自定義模塊級日誌。

日誌模塊設計與開發

首先新建一個分支來開發該模塊。
一、表設計:

CREATE TABLE "public"."module_log"
(
  "id" serial8, 
  "uuid" varchar(255),  
  "uuid_t" varchar(255), 
  "creater" varchar(255),
  "create_time" timestamp(6),  
  "updater" varchar(255),   
  "update_time" timestamp(6),
  "module_name" varchar(255),
  "package_name" varchar(255), 
  "method_name" varchar(255),
  "line_number" int4,
  "level" varchar(255),
  "msg" varchar(255), 
  CONSTRAINT "module_log_pkey" PRIMARY KEY ("id"),  
  CONSTRAINT "module_log_unique_pk" UNIQUE ("module_name") 
);
COMMENT ON COLUMN "public"."module_log"."module_name" IS '模塊名稱';
COMMENT ON COLUMN "public"."module_log"."package_name" IS '來源包、類名';
COMMENT ON COLUMN "public"."module_log"."method_name" IS '來源方法';
COMMENT ON COLUMN "public"."module_log"."line_number" IS '來源行號';
COMMENT ON COLUMN "public"."module_log"."level" IS '日誌級別';
COMMENT ON COLUMN "public"."module_log"."msg" IS '日誌信息';

二、使用mybatis-generator自動生成對應的dao、mapper和dto
三、寫一個日誌接口


四、寫一個日誌實現類


五、測試一下有沒有用,寫一個測試方法


六、結果:日誌已經比較詳細

總結

該日誌類的應用場景爲模塊級,如果需要擴展,則需要再寫其他的實現類

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章