【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 ‘

 

 

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