Linux日志管理——syslog

1、简介

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

2、消息类型和优先级

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


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


3、函数接口

在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函数写日志就行了。



(3)closelog函数

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

值得注意的是,虽然该函数的使用和调用情况非常简单,但是是必不可少的,因为在Linux系统中,打开的日志也是资源,如果只使用openlog函数打开 日 志,而忘记使用closelog关闭日志的话,当打开的日志数量累积到一定程度,便会造成内存不足,从而引起系统问题。

4、程序调用举例

1)用syslog打印

#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

 

转载于:https://my.oschina.net/allencoder/blog/114447

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值