Linux日志管理——syslog

一、简介

    Linux下日志主要在/var/log下,好比:message、warn、localmessages等,在suse11下,由进程/sbin/syslog-ng负责日志打印
    配置文件:
    /etc/syslog-ng/syslog-ng.conf
    /etc/sysconfig/syslog html

二、消息类型和优先级

消息类型
消息来源
kern
内核
User
用户程序
Damon
系统守护进程
Mail
电子邮件系统
Auth
与安全权限相关的命令
Lpr
打印机
News
新闻组信息
Uucp
Uucp程序
Cron
记录当前登陆的每一个用户信息
wtmp
一个用户每次登陆进入和退出时间的永久记录
Authpriv
受权信息


优先级
描述
emerg
最高的紧急程序状态
alert
紧急状态
Cirt
重要信息
warning
警告
err
临界状态
notice
出现不寻常的事情
info
通常性信息
Debug
调试级信息
None
不记录任何日志信息


三、函数接口

在Linux中,提供了四个有关syslog日志系统的系统调用,供用户使用: 数据库

  • openlog:打开日志设备,以供读取和写入,与文件系统调用的open相似;
  • syslog:写入日志,与文件系统调用的write相似;
  • closelog:关闭日志设备,与文件系统调用的close相似;
  • vsyslog:它和syslog功能同样,负责写入日志,只是参数格式不一样。
(1)openlog函数

该函数的声明以下:
void openlog(const char *ident, int option, int facility);

此函数用来打开一个到系统日志记录程序的链接,打开以后就能够用syslog或vsyslog函数向系统日志里添加信息了。而closelog函数就是用来关闭此链接的。
openlog 的第一个参数ident是一个标记,ident所表示的字符串将固定地加在每行日志的前面以标识这个日志,一般就写成当前程序的名称以做标记。第二个参数 option通常是下列选项值取“与”运算(使用“|”表示,如“LOG_CONS | LOG_PID”)的结果:
  • LOG_CONS:若是送到system logger时发生问题,直接写入系统终端;
  • LOG_NDELAY:当即开启链接,一般链接是在第一次写入消息时才打开的;
  • LOG_PERROR:将消息也同时送到stderr设备;
  • LOG_PID:将进程PID含入全部消息中。
第三个参数facility指明记录日志的程序的类型,它主要具备以下几类日志类型:
  • LOG_AUTH :安全/受权消息
  • LOG_AUTHPRIV:安全/受权消息
  • LOG_CRON:时间守护进程(cron和at)专用
  • LOG_DAEMON:其它系统守护进程
  • LOG_KERN:核心消息
  • LOG_LOCAL0到LOG_LOCAL7:系统保留
  • LOG_LPR:printer子系统
  • LOG_MAIL:mail子系统
  • LOG_NEWS:USENET新闻子系统
  • LOG_SYSLOG:syslogd进程内部所产生的消息
  • LOG_USER(缺省):通常使用者缺省使用消息
  • LOG_UUCP:UUCP子系统
  • LOG_FTP:FTP子系统使用

(2)syslog函数

syslog函数的声明以下:
void syslog(int priority, const char * message, ...);

第一个参数是消息的紧急级别priority,第二个参数是消息及其格式,以后是格式对应的参数,如同C语言里面printf输出函数同样使用,具体的格式这里就再也不详述。
第一个参数priority,它是由severity level和facility组成的。Facility已经在上面介绍了,下面介绍一下severity level,也就是消息的重要级别,它主要包括: 安全

  • LOG_EMERG:紧急情况
  • LOG_ALERT:高优先级问题,好比说数据库崩溃等,必需要当即采起反应行动
  • LOG_CRIT:重要情况发生,好比硬件故障
  • LOG_ERR:错误发生
  • LOG_WARNING:警告发生
  • LOG_NOTICE:通常情况,须要引发注意
  • LOG_INFO:信息情况
  • LOG_DEBUG:调试消息

在实际使用中,若是咱们的程序要使用系统日志功能,只须要在程序启动时使用openlog函数来链接syslogd程序,后面随时用syslog函数写日志就好了。 ide



(3)closelog函数

其声明以下:
void closelog( void );

值得注意的是,虽然该函数的使用和调用状况很是简单,可是是必不可少的,由于在Linux系统中,打开的日志也是资源,若是只使用openlog函数打开 日 志,而忘记使用closelog关闭日志的话,当打开的日志数量累积到必定程度,便会形成内存不足,从而引发系统问题。 函数

四、程序调用举例

1)用syslog打印 spa

#include <syslog.h>
#include <stdio.h>
#include <stdarg.h>

int main(void)
{
    int log_test;

    /*打开日志*/
    openlog("main", LOG_PID|LOG_CONS, LOG_USER);

    /*写日志*/
    syslog(LOG_INFO, "PID information, pid=%d", getpid());

    /*关闭日志*/
    closelog();
    return 1;
}

2)用vsyslog打印 调试

#include <syslog.h>
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>

void p_syslog(char *format, ...)
{
    va_list ap;
    va_start(ap, format);
    vsyslog(LOG_INFO, format, ap);
    va_end(ap);
}
int main(void)
{
    openlog("main", LOG_PID, 0);

    int a = 10;
    p_syslog("test is %d\n",a);

    closelog();
    return 1;
}
程序运行的结果写入日志:/var/log/message

【End】 日志


本文部分概念描述性内容摘自:
http://weisjohn.blog.163.com/blog/static/310152562012326113450226
http://hi.baidu.com/ugo5/blog/item/cb90ca0b224ce82de8248831.html code

相关文章
相关标签/搜索