Linux syslog相關函數詳解

介紹

        syslog是Unix系統的日誌系統。能夠將日誌記錄在本地系統中。數據庫

        一個完整的syslong日誌包含以下信息:程序模塊 | 嚴重性 | 時間 | 主機名 | 進程名 | 進程ID | 正文。網絡

syslong相關函數

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);

syslog實例

#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文件中看到相關的打印信息。調試

相關文章
相關標籤/搜索