一、簡介
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文件都會增加一條新的記錄
轉載自:http://www.cnblogs.com/bonelee/p/6234647.html