syslog是Unix系統的日誌系統。能夠將日誌記錄在本地系統中。數據庫
一個完整的syslong日誌包含以下信息:程序模塊 | 嚴重性 | 時間 | 主機名 | 進程名 | 進程ID | 正文。網絡
1. openlog()函數。調用openlog()函數時可選的。若是不調用openlog()函數,則在第一次調用syslong()函數時打開日誌鏈接。ide
#include <syslog.h> /* * ident: 標記,ident表示的字符串將添加在每行日誌的前面,用以標記日誌. * * option: 調用syslong()函數時的控制標誌,標誌的含義以下: * LOG_CONS: 若是將日誌發送給syslogd守護進程時發生錯誤,則將日誌顯示到終端。 * LOG_NDELAY: 當即打開與系統日誌的鏈接。 * LOG_ODELAY: 相似於LOG_NDELAY,與系統日誌的鏈接只有在調用syslog()函數時才創建。 * LOG_PERROR: 將信息寫入日誌文件的同時,將日誌發送到錯誤輸出。 * LOG_PID: 每條日誌中都包含進程ID。 * * facility: 指定記錄日誌程序的類型。 * LOG_AUTH: 認證系統(login, su, getty等)。 * LOG_AUTHPRIV: 同 LOG_AUTH 但只登錄到所選擇的單個用戶可讀的文件中。 * LOG_CRON: cron守護進程。 * LOG_DAEMON: 其餘系統守護進程。 * LOG_FTP: 文件傳輸協議:ftpd、tftpd. * LOG_KERN: 內核產生的消息. * LOG_LPR: 系統打印機緩衝池:lpr、lpd. * LOG_MAIL: 電子郵件系統. * LOG_NEWS: 網絡新聞系統. * LOG_SYSLOG: 由syslogd(8)產生的內部消息 * LOG_USER: 隨機用戶進程產生的消息. * LOG_UUCP: UUCP 子系統 * LOG_LOCAL0 ~ LOG_LOCAL7: 本地使用保留 */ void openlog(const char *ident, int option, int facility);
2. syslog()函數。syslog()函數相似於write()函數,往系統日誌文件中寫日誌。系統日誌文件的存儲位置通常在/var/log/目錄下。syslog()函數把日誌寫在/var/log/syslog文件中。函數
#include <syslog.h> /* * priority: 表示日誌級別。 * LOG_EMERG: 緊急狀況. * LOG_ALERT: 應該被當即改正的問題,如系統數據庫破壞. * LOG_CRIT: 重要狀況,如硬盤錯誤. * LOG_ERR: 錯誤. * LOG_WARNING: 警告信息. * LOG_NOTICE: 不是錯誤狀況,可是可能須要處理. * LOG_INFO: 情報錯誤. * LOG_DEBUG: 包含情報的信息,一般指在調試一個程序時使用. */ void syslog(int priority, const char *fmt, ...);
3. closelog()函數。關閉日誌設備。closelog()函數調用也是可選的,它只是關閉被用於與syslog守護進程通訊的描述符。spa
#include <syslog.h> void closelog(void);
#include <stdio.h> #include <stdarg.h> #include <stdlib.h> #include <syslog.h> #define BUFSZ 4096 static void log_msg(const char *fmt, ...) { char buf[BUFSZ]; va_list ap; va_start(ap, fmt); vsnprintf(buf, BUFSZ - 1, fmt, ap); strcat(buf, "\n"); openlog("test", LOG_CONS | LOG_NDELAY | LOG_PERROR, LOG_USER); // 該行可選 syslog(LOG_INFO, "%s", buf); closelog(); // 該行可選 } int main(int argc, char *argv[]) { log_msg("Hellow World. This is a syslog test."); exit(0); }
運行該程序後,能夠在/var/log/syslog文件中看到相關的打印信息。調試