系统日志
rsyslog
我们可以通过rsyslog查看系统日志。rsyslog是从内存采集日志到硬盘的工具,并非生成日志,日志由程序产生在内存。
日志信息一般保存在 /var/log/message ,可以通过cat命令查看。
不过在ubuntu下需要先配置:打开 /etc/rsyslog.conf 可以看到,配置文件保存在 /etc/rsyslog.d/ 目录下:
cd到 /etc/rsyslog.d/ ,打开其中的 50-default.conf ,增加一行:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
也可以写为: *.* /var/log/messages
其意义是: 日志类型.级别(;分隔) 存放文件路径
*.* 意思为:任何类型日志的任何级别
可以通过man syslog查看
从上到下级别由低到高,记录的信息越少
如果之后需要使用用户日志,把user.*前面的#删除即可。
修改完保存退出,重启rsyslog(需要密码)。现在cat /var/log/messages 就能显示出日志信息:
之后只要cat相应文件就可以读出具体的日志信息了。
利用库函数
我们也可使用库函数自定义日志
需要用到头文件:#include <syslog.h>
void openlog( char *ident, int option, int facility)
void syslog( int priority, char *format, ...)
void closelog( void )
第一个参数是标志字符串,也就是日志中的第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),已经设置了就可以不用或了。
参考链接:https://blog.csdn.net/sirria1/article/details/105117850
下面是一个简单的函数,需要时侯调用,就可以将数据信息保存到对应日志文件
我这里设置的是LOCAL1,会保存在/var/log/local1 文件中
int logger() { openlog("test:",LOG_CONS | LOG_PID,0); //"test" 会默认保存在日期,时间,机器号(默认字段)后面 syslog(LOG_WARNING|LOG_LOCAL1,"writen fail in program:\n"); closelog(); }
标签:LOG,系统,信息,syslog,rsyslog,Linux,日志,log From: https://www.cnblogs.com/genm/p/17286002.html