一、簡介
syslog是Linux系統預設的日誌守護程式。預設的主配置檔案和輔助配置檔案分別是/etc/syslog.conf和/etc/sysconfig/syslog檔案。通常,syslog 接受來自系統的各種功能的資訊,每個資訊都包括重要級。/etc/syslog.conf 檔案通知 syslogd 如何根據裝置和資訊重要級別來報告資訊。
二、配置檔案
/etc/syslog.conf 檔案按照以下格式進行配置
facility.level action
說明 :facility.level為選擇條件,本身分為兩個欄位,之間用一個小數點(.)分隔。action和facility.level之間使用TAB隔開。
facility 訊息型別,指定 syslog 功能,主要包括:
kern 核心資訊,首先通過 klogd 傳遞; user 使用者程式; mail 郵件; daemon 後臺程式; authpriv 授權資訊; syslog 系統日誌; lpr 列印資訊; news 新聞組資訊; uucp 由uucp生成的資訊 cron 計劃和任務資訊。 mark syslog 內部功能用於生成時間戳 local0----local7 與自定義程式使用,例如使用 local5 做為 ssh 功能
* 萬用字元代表除了 mark 以外的所有功能
level 訊息級別,指定syslog優先順序,主要包括:
emerg 或 panic 該系統不可用(最緊急訊息) alert 需要立即被修改的條件(緊急訊息) crit 阻止某些工具或子系統功能實現的錯誤條件(重要訊息) err 阻止工具或某些子系統部分功能實現的錯誤條件(出錯訊息) warning 預警資訊(警告訊息) notice 具有重要性的普通條件(普通但重要的訊息) info 提供資訊的訊息(通知性訊息) debug 不包含函式條件或問題的其他資訊(除錯級-資訊量最多) none 沒有重要級,通常用於排錯(不記錄任何日誌訊息) * 所有級別,除了none
action 動作域,主要包括:
操作動作
日誌資訊可以分別記錄到多個檔案裡,還可以傳送到命名管道、其他程式甚至另一臺機器。包括三類:
file 指定檔案的絕對路徑
terminal 或 prin 完全的序列或並行裝置標誌符
@host(@IP地址) 遠端的日誌伺服器
/var/log/lastlog : 記錄每個使用者最近簽入系統的時間
/var/run/utmp : 記錄每個使用者簽入系統的時間, who, users, finger 等指令會查這個檔案. /var/log/wtmp : 記錄每個使用者簽入及簽出的時間, last 這個指令會查這個檔案. 這個檔案也記錄 shutdown 及 reboot 的動作. /var/log/secure : 登入系統的資訊 /var/log/maillog : 記錄 sendmail 及 pop 等相關訊息. /var/log/cron : 記錄 crontab 的相關訊息 ,定時器的資訊 /var/log/dmesg : /bin/dmesg 會將這個檔案顯示出來, 它是開機時的畫面訊息. /var/log/xferlog : 記錄那些位址來 ftp 拿取那些檔案. /var/log/messages : 系統大部份的訊息皆記錄在此, 包括 login, check password , failed login, ftp, su 等.
syslog APIs
Linux C中提供一套系統日記寫入介面,包括三個函式:openlog,syslog和closelog。呼叫openlog是可選擇的。如果不呼叫openlog,則在第一次呼叫syslog時,自動呼叫openlog。呼叫closelog也是可選擇的,它只是關閉被用於與syslog守護程式通訊的描述符。
其中openlog和closelog都是可選的。不過,通過呼叫openlog,我們可以指定ident引數。這樣,ident將被加到每條日記記錄中。ident一般設成程式的名字,如在下面例子中的"testsyslog":
#include <syslog.h> int main(int argc, char *argv[]) { openlog("testsyslog", LOG_CONS | LOG_PID, 0); syslog(LOG_USER | LOG_INFO, "syslog test message generated in program %s \n", argv[0]); closelog(); return 0; }
編譯生成可執行檔案後,每執行一次,程式將往/var/log/messages新增一條如下的記錄:
- Apr 23 17:15:15 lirong-920181 testsyslog[27214]: syslog test message generated in program ./a.out
格式基本是:timestamp hostname ident[pid]:log message。其中ident就是我們呼叫openlog是指定的"testsyslog",而之所以會列印出[27214]是openlog的option引數中指定了LOG_PID。
一般來說,我們希望能夠為自己的應用程式指定特定的日記檔案。這時候,我們就需要修改syslog.conf檔案。假設我們現在要把除錯(debug)日記記錄寫到檔案/var/log/debug檔案中。第一步要做的是,在syslog.conf檔案新增如下訊息規則作為第一條規則:
-
user.debug /var/log/debug
要是新增的新規則生效,第二步我們需要重啟syslogd和klogd:service syslog restart(ubuntu下為/etc/init.d/rsyslog restart)
為了測試新規則是否生效,我們可以將testsyslog修改如下:
#include <syslog.h> int main(int argc, char *argv[]) { openlog("testsyslog", LOG_CONS | LOG_PID, 0); syslog(LOG_USER | LOG_DEBUG, "syslog test message generated in program %s \n", argv[0]); closelog(); return 0; }
編譯生成執行檔案後,每執行一次,/var/log/debug檔案都會增加一條新的記錄!