Rotated
Log 簡介
Rotated
log是linux支持日志文件自動轉儲和重命名的機制。當需要限制每個日志文件大小,或者需要周期地統計並記錄日志的時候,就是rotated
log機制大顯身手的好時機。
Rotated
Log的使用和配置
Rotated
log的配置文件都是在/etc/logrotate.d裡面,它本身依賴於logrotate命令的執行。logrotate自身作為一個日常的cron
job,正常情況下它一天只會執行一次,通過下面的命令可以看到它是如何作為一個cron
job的:
[root@localhost
cron.daily]# pwd
/etc/cron.daily
[root@localhost
cron.daily]# cat logrotate
#!/bin/sh
/usr/sbin/logrotate
/etc/logrotate.conf
EXITVALUE=$?
if
[ $EXITVALUE != 0 ]; then
/usr/bin/logger
-t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit
0
除非rotate是根據日志文件大小進行,或者強制執行轉儲命令logrotate -f。配置文件裡指定了需要rotate的日志文件的名字,以及rotate觸發的機制、處理的策略,以/etc/logrotate.d/syslogd為例:
[root@localhost
logrotate.d]# cat syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
sharedscripts
postrotate
/bin/kill
-HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null ||
true
endscript
}
從第一到第五行指定了有待rotate的日志文件的名字,這裡列出了五個日志文件需要保存。sharedscripts表示postrotate腳本命令/bin/kill
-HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null ||
true只會執行一次,而不是在每個上述的日志文件rotate之後都執行一次。
Rotated
Log相關的程序設計
根據本人最近使用logrotate的經驗和教訓,重點需要考慮和引起注意的要素有:
1.考慮到保證每一條記錄的完整性,建議根據時間而非容量進行自動回轉。
2.考慮到查詢的方便和log
rotated的命名規則,需要設計好合適的數據結構來統計每一個日志文件的記錄。還是以上面的mailog日志文件為例,如果某個時刻系統只有一個mailog,第一次rotate之後之前的mailog會重新命名為mailog.1,而mailog裡面的內容會被清空;第二次rotate之後,之前的maillog.1會被重命名為mailog.2,而之前的maillog會重新命名為mailog.1,而mailog裡面的內容會被情況,後續的rotate以此類推。因此,需要一個設計良好的數據結構和方法來表示文件名稱和真實文件。
3.如果存在多個用戶同時訪問日志文件的情況,為了保證日志總數和記錄的完整和一致,需要在訪問文件前加鎖。
4.進階:Rotated
log本身和其他模塊和代碼沒有聯系,其他應用往往需要從rotated
log裡存取數據,為此可以開發出和具體業務無關的且便於擴展的rotated
log API,以靜態庫或者動態庫的形式支持二次開發。
本文出自 “存儲之廚” 博客,請務必保留此出處http://xiamachao.blog.51cto.com/10580956/1769244