【rsyslog】linux簡單開啓rsyslog自定義日誌記錄(C,C++)

功能目標需求:記錄應用的日誌到指定的目錄文件

開發:

1.配置:

rsyslog配置增加自定義的日誌路徑,rsyslog的配置文件爲rsyslog.conf,一般在/etc目錄下,vi打開後增加配置

local2.*                                                /root/logs/log1.log
local3.*                                                /root/logs/log2.log

log1.log,log2.log爲自定義日誌名字。

配置更新後,重啓rsyslog

service rsyslog restart

2.程序調用接口:

相關接口
      void openlog( char *ident, int option, int  facility)
      void syslog( int priority, char *format, ...)
      void closelog( void )
頭文件:

#include <syslog.h>
openlog()函數有三個參數:
第一個參數是標誌字符串,也就是日誌中的第5個字段(前4個字段分別是月、日、時:分:秒、主機名),不設的話缺省取程序名稱;
第二個參數是選項,是下面一些標誌位的組合,如(LOG_PID | LOG_CONS):

option參數

LOG_PID    // 在日誌信息中包含進程標識符,這是系統分配給每個進程的一個唯一值

LOG_CONS  // 如果信息不能被記錄到日誌文件中,就把它們發送到控制檯 

LOG_ODELAY // 在第一次調用syslog時纔打開日誌功能

LOG_NDELAY  // 立即打開日誌功能,而不是等到第一次記錄日誌時

第三個參數是說明日誌類型的:

       LOG_AUTH
       LOG_AUTHPRIV
       LOG_CRON
       LOG_DAEMON
       LOG_KERN
       LOG_LOCAL0 - LOG_LOCAL7 (編程中用戶自定義)
       LOG_LPR
       LOG_MAIL
       LOG_NEWS
       LOG_SYSLOG
       LOG_USER(default)
       LOG_UUCP


syslog()函數主要的是第一個參數priority,後面那些參數就是和printf( )函數用法一樣了,priority值表示該條日誌的級別,日誌級別分8級,由高到低的順序爲:

LOG_EMERG // 緊急情況

LOG_ALERT // 高優先級故障,例如數據庫崩潰

LOG_CRIT   // 嚴重錯誤,例如硬件故障

LOG_ERR   // 錯誤

LOG_WARNING  // 警告

LOG_NOTICE // 需要注意的特殊情況

LOG_INFO // 一般信息

LOG_DEBUG // 調試信息

根據系統配 置,LOG_EMERG信息可能會廣播給所有用戶,LOG_ALERT信息可能會EMAIL給管理員,LOG_DEBUG信息可能會被忽略,而其他信息則 寫入日誌文件。當我們編寫的程序需要使用日誌記錄功能時,只要在希望創建一條日誌信息時簡單的調用syslog函數即可。如果openlog( )時沒有指定facility,是可以把facility的值或到priority中的,如(LOG_AUTH | LOG_INFO),已經設置了就可以不用或了。

關閉日誌記錄。

void closelog( void )

示例代碼如下

    #include <syslog.h>

	int main()
    {
        string str = "test log";
        openlog("ExeName", LOG_CONS | LOG_PID, 0);

        syslog(LOG_ERR | LOG_LOCAL3, str.c_str());

        syslog(LOG_ERR | LOG_LOCAL2, str.c_str());

        closelog();
        
        return 0;
    }

3.命令行調用

 logger -p local2.info ‘this is test log ‘

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章