前言
由於ERP項目中沒有可視化的日誌管理,配置一些開源的日誌系統又會佔用一些服務器資源,因此想模塊化的處理系統的運行日誌,該日誌只記錄各模塊的運行日誌,不需要記錄所有的系統日誌(記錄全部則會影響性能)。由於各模塊的運行日誌相對整個系統的日誌來說較少,對系統性能的影響較小,因此開發該模塊是可行的。
老版本
由於考慮到非侵入式,先看一下之前的日誌配置。
發現採用的是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
三、寫一個日誌接口
四、寫一個日誌實現類
五、測試一下有沒有用,寫一個測試方法
六、結果:日誌已經比較詳細
總結
該日誌類的應用場景爲模塊級,如果需要擴展,則需要再寫其他的實現類