写进syslog_syslog简介——系统日志写入API

本文介绍了Linux系统中的syslog守护进程及其配置文件/etc/syslog.conf,讲解了如何根据facility.level设置日志记录,并详细阐述了syslog C接口的使用,包括openlog、syslog和closelog函数,以及如何自定义日志文件。
摘要由CSDN通过智能技术生成

一、简介

syslog是Linux系统默认的日志守护进程。默认的主配置文件和辅助配置文件分别是/etc/syslog.conf和/etc/sysconfig/syslog文件。通常,syslog 接受来自系统的各种功能的信息,每个信息都包括重要级。/etc/syslog.conf 文件通知 syslogd 如何根据设备和信息重要级别来报告信息。

二、配置文件

/etc/syslog.conf 文件按照以下格式进行配置

facility.level action

说明 :facility.level为选择条件,本身分为两个字段,之间用一个小数点(.)分隔。action和facility.level之间使用TAB隔开。

facility 消息类型,指定 syslog 功能,主要包括:

kern 内核信息,首先通过 klogd 传递;

user 用户进程;

mail 邮件;

daemon 后台进程;

authpriv 授权信息;

syslog 系统日志;

lpr 打印信息;

news 新闻组信息;

uucp 由uucp生成的信息

cron 计划和任务信息。

mark syslog 内部功能用于生成时间戳

local0----local7 与自定义程序使用,例如使用 local5 做为 ssh 功能

*        通配符代表除了 mark 以外的所有功能

level 消息级别,指定syslog优先级,主要包括:

emerg 或 panic 该系统不可用(最紧急消息)

alert 需要立即被修改的条件(紧急消息)

crit 阻止某些工具或子系统功能实现的错误条件(重要消息)

err 阻止工具或某些子系统部分功能实现的错误条件(出错消息)

warning 预警信息(警告消息)

notice 具有重要性的普通条件(普通但重要的消息)

info 提供信息的消息(通知性消息)

debug 不包含函数条件或问题的其他信息(调试级-信息量最多)

none 没有重要级,通常用于排错(不记录任何日志消息)

* 所有级别,除了none

action 动作域,主要包括:

操作动作

日志信息可以分别记录到多个文件里,还可以发送到命名管道、其他程序甚至另一台机器。包括三类:

file                    指定文件的绝对路径

terminal 或 prin        完全的串行或并行设备标志符

@host(@IP地址)    远程的日志服务器

/var/log/lastlog : 记录每个使用者最近签入系统的时间

/var/run/utmp : 记录每个使用者签入系统的时间, who, users, finger 等指令会查这个档案.

/var/log/wtmp : 记录每个使用者签入及签出的时间, last 这个指令会查这个档案. 这个档案也记录 shutdown 及 reboot 的动作.

/var/log/secure : 登录系统的信息

/var/log/maillog : 记录 sendmail 及 pop 等相关讯息.

/var/log/cron : 记录 crontab 的相关讯息 ,定时器的信息

/var/log/dmesg : /bin/dmesg 会将这个档案显示出来, 它是开机时的画面讯息.

/var/log/xferlog : 记录那些位址来 ftp 拿取那些档案.

/var/log/messages : 系统大部份的讯息皆记录在此, 包括 login, check password , failed login, ftp, su 等.

syslog APIs

Linux C中提供一套系统日记写入接口,包括三个函数:openlog,syslog和closelog。调用openlog是可选择的。如果不调用openlog,则在第一次调用syslog时,自动调用openlog。调用closelog也是可选择的,它只是关闭被用于与syslog守护进程通信的描述符。

其中openlog和closelog都是可选的。不过,通过调用openlog,我们可以指定ident参数。这样,ident将被加到每条日记记录中。ident一般设成程序的名字,如在下面例子中的"testsyslog":

#include

int main(int argc, char *argv[])

{

openlog("testsyslog", LOG_CONS | LOG_PID, 0);

syslog(LOG_USER| LOG_INFO, "syslog test message generated in program %s \n", argv[0]);

closelog();return 0;

}

编译生成可执行文件后,每运行一次,程序将往/var/log/messages添加一条如下的记录:

Apr 23 17:15:15 lirong-920181 testsyslog[27214]: syslog test message generated in program ./a.out

格式基本是:timestamp hostname ident[pid]:log message。其中ident就是我们调用openlog是指定的"testsyslog",而之所以会打印出[27214]是openlog的option参数中指定了LOG_PID。

一般来说,我们希望能够为自己的应用程序指定特定的日记文件。这时候,我们就需要修改syslog.conf文件。假设我们现在要把调试(debug)日记记录写到文件/var/log/debug文件中。第一步要做的是,在syslog.conf文件添加如下消息规则作为第一条规则:

user.debug /var/log/debug

要是添加的新规则生效,第二步我们需要重启syslogd和klogd:service syslog restart(ubuntu下为/etc/init.d/rsyslog restart)

为了测试新规则是否生效,我们可以将testsyslog修改如下:

#include

int main(int argc, char *argv[])

{

openlog("testsyslog", LOG_CONS | LOG_PID, 0);

syslog(LOG_USER| LOG_DEBUG, "syslog test message generated in program %s \n", argv[0]);

closelog();return 0;

}

编译生成执行文件后,每运行一次,/var/log/debug文件都会增加一条新的记录!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值