功能目标需求:记录应用的日志到指定的目录文件
开发:
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 ‘