新聞中心
滾動切分目前屬于實驗性特性,如有問題請隨時反饋。

創(chuàng)新互聯(lián)建站自2013年起,先為東阿等服務建站,東阿等地企業(yè),進行企業(yè)商務咨詢服務。為東阿企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。
之前的章節(jié)中我們知道,?glog?組件支持通過設置日志文件名稱的方式,使得日志文件按照日期進行輸出。從?GF v1.12?版本開始,?glog?組件也支持對日志文件進行滾動切分的特性,該特性涉及到日志對象配置屬性中的以下幾個配置項:
RotateSize int64 // Rotate the logging file if its size > 0 in bytes.
RotateExpire time.Duration // Rotate the logging file if its mtime exceeds this duration.
RotateBackupLimit int // Max backup for rotated files, default is 0, means no backups.
RotateBackupExpire time.Duration // Max expire for rotated files, which is 0 in default, means no expiration.
RotateBackupCompress int // Compress level for rotated files using gzip alGOrithm. It's 0 in default, means no compression.
RotateCheckInterval time.Duration // Asynchronizely checks the backups and expiration at intervals. It's 1 hour in default.簡要說明:
- ?
RotateSize?用于設置滾動切分時按照文件大小進行切分,該屬性的單位為字節(jié)。只有當該屬性值大于0時才會開啟滾動切分的特性。 - ?
RotateExpire?用于設置滾動切分時按照文件超過一定時間沒有修改時進行切分。只有當該屬性值大于0時才會開啟滾動切分的特性。 - ?
RotateBackupLimit?用于設置滾動切分的保留文件數(shù),默認為0表示不保留,往往該值需要設置大于0。超過該保留文件數(shù)的切分文件將會按照從舊到新進行刪除。 - ?
RotateBackupExpire?用于設置按照過期時間進行清理。當切分文件超過指定的時間時將會被刪除。 - ?
RotateBackupCompress?用于設置切分文件的壓縮級別,默認為0表示不壓縮。該壓縮級別的取值范圍為1-9,其中9為最大壓縮級別。 - ?
RotateCheckInterval?用于設置定時器的定時檢測間隔,默認為1小時,往往不需要設置。
功能開啟
從以上滾動切分的配置項可以看到,僅有當?RotateSize?或者?RotateExpire?配置項被設置時才會生效,默認情況下是關閉的。
文件格式
?glog?組件的日志輸出文件固定格式為?*.log?,即使用?.log?作為日志文件名后綴。為方便統(tǒng)一規(guī)范管理,切分文件的格式也是固定的,開發(fā)者無法自定義。當日志文件被滾動切分時,當前被切分的日志文件將會按照”?*.切分時間.log?“的格式進行重命名。其中切分時間的格式為:年月日時分秒毫秒微秒,例如:
access.log -> access.20200326101301899002.log
access.20200326.log -> access.20200326.20200326101301899002.log配置示例
示例1,按照日志文件大小進行滾動切分:
logger:
Path: "/var/log"
Level: "all"
Stdout: false
RotateSize: "100M"
RotateBackupLimit: 2
RotateBackupExpire: "7d"
RotateBackupCompress: 9簡要說明:
- 可以看到?
RotateSize?配置項在配置文件中支持使用字符串的形式進行設置,例如:100M, 200MB, 500KB, 1Gib等等,在該示例中,我們設置日志文件大小超過100M時進行切分。 - 同時,?
RotateBackupExpire?的配置項也支持字符串配置,例如:1h, 30m, 1d6h, 7d等等,在該示例中,我們設置切分文件的過期時間為7d,即七天后會自動刪除該切分文件。 - 這里通過設置?
RotateBackupCompress?為9表示使用最大的壓縮級別,使得切分后的文件最小化存儲。但是需要注意,切分和壓縮是兩個不同的操作,文件壓縮是一個異步操作,因此當文件被自動切分后,定時器通過一定的時間間隔定期檢查后再自動將其壓縮為*.gz文件。壓縮級別設置得越高,會更多使用CPU資源。
示例2,按照日志文件修改過期進行滾動切分:
logger:
Path: "/var/log"
Level: "all"
Stdout: false
RotateExpire: "1d"
RotateBackupLimit: 1
RotateBackupExpire: "7d"
RotateBackupCompress: 9在這里,我們設置?RotateExpire?為1d表示當某個日志文件超過一天都沒有任何修改/寫入時,?glog?模塊將會自動將其進行滾動切分。同時進行壓縮存儲。
注意事項
由于不同的日志對象可能有不同的滾動切分配置,假如多個日志對象的日志目錄為同一個,并且都開啟了滾動切分特性,那么多個日志對象的滾動切分配置項會沖突,會有意想不到的結果。因此,我們建議您兩個選擇:
- (推薦)全局使用同一個默認的日志單例對象(?
g.Log()?),通過?Cat?或?File?方法設置輸出日志文件到不同的目錄或文件名。 - 將不同日志對象的輸出目錄(?
Path?配置項)設置為不同的文件目錄,并且多個日志對象的日志目錄不存在相互的層級關系。
例如: 我們有兩類業(yè)務日志文件?order?和?promo?,分別對應訂單業(yè)務和促銷業(yè)務,我們先假定他們屬于同一個服務程序中。
假如日志路徑為?/var/log?,我們可以:
- 通過?
g.Log().Cat("order").Print(xxx)?輸出訂單日志。生成的日志文件例如:?/var/log/order/2020-03-26.log?。 - 通過?
g.Log().Cat("promo").Print(xxx)?輸出促銷日志。生成的日志文件例如:?/var/log/promo/2020-03-26.log?。
也可以通過:
- 通過?
g.Log().File("order").Print(xxx)?輸出訂單日志。生成的日志文件例如:?/var/log/order.log?。 - 通過?
g.Log().File("order").Print(xxx)?輸出促銷日志。生成的日志文件例如:?/var/log/promo.log?。
文章名稱:創(chuàng)新互聯(lián)GoFrame教程:GoFrame 日志組件-Rotate特性
網(wǎng)站地址:http://m.fisionsoft.com.cn/article/dheehes.html


咨詢
建站咨詢
