為了方便配置,日誌的原有路徑和備份路徑等配置我們定義在propies檔案中,然後通過spring的註解value來獲取
#日誌清理配置
original.log.path=
/data/logs/sspapi-job
log.back.path=
/data/logs/sspapi-job/back
back.log.date=
30delete
.log.date=
35log.name.prefix=test_log
@value
("$"
)private string originallogpath;
@value
("$"
)private string logbackpath;
@value
("$"
)private string lognameprefix;
@value
("$"
)private int backlogdate;
@value
("$"
)private int deletelogdate;
由於配置有錯誤可能,以及目錄存在的實際情況,為了保證程式的健壯性,必要的校驗是必不可少的
//判斷刪除和備份日期是否配置正確
if(backlogdate>=deletelogdate||backlogdate<
1||deletelogdate<1)
//判斷原有日誌目錄是否存在
file originallogdir =
newfile
(originallogpath);if
(!originallogdir.
isdirectory()
)//若備份目錄不存在,建立
file logbackdir =
newfile
(logbackpath);if
(logbackdir.
isfile()
)if(!logbackdir.
exists()
)}
日誌刪除和備份策略具體體現為,根據日誌的檔名中包含的時間資訊,獲得與當前時間的差值,與配置檔案中的備份時間和刪除時間對比,做不同處理。具體處理邏輯需根據需求和檔名格式有所不同,下面是乙個簡單的demo
public boolean execute
(string param)
//判斷原有日誌目錄是否存在
file originallogdir =
newfile
(originallogpath);if
(!originallogdir.
isdirectory()
)//若備份目錄不存在,建立
file logbackdir =
newfile
(logbackpath);if
(logbackdir.
isfile()
)if(!logbackdir.
exists()
)}//遍歷原有日誌路徑下的檔案,將符合格式的進行備份
file[
] originallogs = originallogdir.
listfiles()
;for
(file logfile:originallogs)
}//遍歷備份路徑下的檔案,進行刪除
file[
] backfiles = logbackdir.
listfiles()
;for
(file logfile:backfiles)
}return
true;}
/** * 處理單個檔案
* @param logfile 需處理的檔案
* @param operationtype 操作型別,1為移動備份,2為刪除
*/private
void
dealfile
(file logfile,int operationtype)
//獲取當前時間與檔名中的時間的天數差值
int days =
((int)
(new
date()
.gettime()
/1000)-
(int)
(filedate.
gettime()
/1000))
/(60*
60*24)
;//比較檔案日期和當前日期,超過指定日期的移動到備份目錄if(
move_code
== operationtype)
}elseif(
delete_code
== operationtype)}}
/** * 取出檔名中代表日期的字段,轉換為日期格式
* @param filename
* @return
*/private date getdatestr
(string filename)
",filename)
;return
null;}
date filedate =
null
; ******dateformat sdf =
new******dateformat
(date_format);
trycatch
(parseexception e)
",filename);}
return filedate;
}
通常來說,日誌清理任務是通過定時任務來執行的,定時任務的有許多框架,spring-task,quartz等,這次我們已spring-task作為我們定時任務的載體,
只需在方法上加入註解
@scheduled(cron = 「0/30 * * * * ?」)
使用spring boot需只在spring的啟動類上加入註解@enablescheduling即可開啟定時任務
關於 cronexpression 表示式有至少 6 個(也可能是 7 個)由空格分隔的時間元素。
//感覺基本上是6個,7個好像沒成功過
字段 允許值 允許的特殊字元
秒 0-59 , - * /
分 0-59 , - * /
小時 0-23 , - * /
日期 1-31 , - * ? / l w c
月份 1-12 或者 jan-dec , - * /
星期 1-7 或者 sun-sat , - * ? / l c #
年(可選)留空, 1970-2099 , - * /
seconds:可出現,- * / 四個字元,有效範圍為0-59的整數
minutes:可出現,- * / 四個字元,有效範圍為0-59的整數
hours:可出現,- * / 四個字元,有效範圍為0-23的整數
dayofmonth:可出現,- * / ? l w c八個字元,有效範圍為0-31的整數
month:可出現,- * / 四個字元,有效範圍為1-12的整數或jan-dec
dayofweek:可出現,- * / ? l c #四個字元,有效範圍為1-7的整數或sun-sat兩個範圍。1表示星期天,2表示星期一, 依次類推
year:可出現,- * / 四個字元,有效範圍為1970-2023年
開發小工具
獲取上級方法的資訊 thread.currentthread getstacktrace 1 是你當前方法執行堆疊 thread.currentthread getstacktrace 2 就是上一級的方法堆疊 以此類推 param content return public static stri...
vs工程清理小工具
通常我們在傳輸vs工程的時候,有很多不必要的檔案可以清理,通常這些檔案占用的空間可能還比較大,遠超工程 檔案的大小,於是寫了這個小工具,方便清理工程,支援多個過程同時清理,拖拽到介面上即可。核心 如下 void cvsprojectcleanerdlg onbnclickedok else 開始逐個...
EAS開發小工具
系統選單 啟用系統選單快捷鍵 shift ctrl alt k 系統選單匯出 geninsert select from t bas sysmenuitem where 1 1 客戶化選單 客戶化選單匯出 geninsert select from t pm mainmenuitem where 1...