系统日志

rsyslog

我们可以通过rsyslog查看系统日志。rsyslog是从内存采集日志到硬盘的工具,并非生成日志,日志由程序产生在内存。

日志信息一般保存在     /var/log/message    ,可以通过cat命令查看。

不过在ubuntu下需要先配置:打开  /etc/rsyslog.conf  可以看到,配置文件保存在  /etc/rsyslog.d/  目录下:

乌班图启动mysql输出日志 乌班图系统日志位置_配置文件

 

 

cd到 /etc/rsyslog.d/  ,打开其中的 50-default.conf ,增加一行:

 

*.info;mail.none;authpriv.none;cron.none     /var/log/messages
也可以写为:     *.*  /var/log/messages
其意义是: 日志类型.级别(;分隔)   存放文件路径
*.* 意思为:任何类型日志的任何级别
可以通过man syslog查看

乌班图启动mysql输出日志 乌班图系统日志位置_乌班图启动mysql输出日志_02

乌班图启动mysql输出日志 乌班图系统日志位置_配置文件_03

 

 从上到下级别由低到高,记录的信息越少

 

如果之后需要使用用户日志,把user.*前面的#删除即可。

修改完保存退出,重启rsyslog(需要密码)。现在cat /var/log/messages 就能显示出日志信息:

乌班图启动mysql输出日志 乌班图系统日志位置_配置文件_04

 之后只要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),已经设置了就可以不用或了。

 

 

下面是一个简单的函数,需要时侯调用,就可以将数据信息保存到对应日志文件

我这里设置的是LOCAL1,会保存在/var/log/local1 文件中(可以用上面的方法在/etc/rsyslog.d/ 中的相应配置文件里修改保存文件路径)

int logger()
{
	openlog("test:",LOG_CONS | LOG_PID,0);               //"test" 会默认保存在日期,时间,机器号(默认字段)后面
	syslog(LOG_WARNING|LOG_LOCAL1,"writen fail in program:\n");
	closelog();
}

  

乌班图启动mysql输出日志 乌班图系统日志位置_乌班图启动mysql输出日志_05