syslog日志转换器_Linux标准系统日志接口之syslog(3)

1. 简介

syslog机制包含syslogd守护进程与syslog(3)系列库函数:syslog(3)库函数用于程序调用以生成日志,syslogd守护进程负责发布日志,通过提供/dev/log Unix域数据报套接字或UDP协议的514端口,以支持与syslog(3)调用端程序的本地与网络通信方式。

syslogd守护进程根据自身配置文件中的定义,将产生的日志发布至终端控制台,FIFO,网络套接字,磁盘文件,登录用户等。

大多数Linux发行版中,syslogd已经被rsyslogd替代,主配置文件为/etc/rsyslog.conf。

2. 用法

syslog(3)系列库函数主要包括openlog(3),syslog(3),closelog(3)与setlogmask(3),分别用于打开日志,记录日志,关闭日志以及过滤日志。

#include

void openlog(const char *ident, int option, int facility);

void syslog(int priority, const char *format, ...);

void closelog(void);

int setlogmask(int mask);

#include

void vsyslog(int priority, const char *format, va_list ap);

openlog(3)用于建立与syslogd守护进程的连接,以及设置日志记录的默认行为

ident指定日志信息的标识字符串,为NULL时将使用程序名称

option指定控制openlog(3)行为的的标志,多个标志之间可以采取按位或运算而取并集:

LOG_CONS:向syslogd发送日志出错时,将日志发送至系统控制台

LOG_NDELAY:立即建立与syslogd的连接,而不必等到第一条日志信息产生时

LOG_NOWAIT:对于在记录日志过程中创建的子进程,不执行wait(2);glibc的openlog(3)实现不创建子进程,因而该选项在Linux下无效

LOG_ODELAY:与LOG_NDELAY相反,仅在第一条日志信息产生时才创建与syslogd的连接;默认选项

LOG_PERROR:将日志信息发给syslogd的同时,打印至stderr

LOG_PID:每一条日志信息中另包含进程PID

facility指定日志记录的默认类型,包括LOG_AUTH/LOG_AUTHPRIV/LOG_CRON/LOG_DAEMON/LOG_FTP/LOG_KERN/LOG_LOCAL0-LOG_LOCAL7/LOG_LPR/LOG_MAIL/LOG_NEWS/LOG_SYSLOG/LOG_USER/LOG_UUCP

对应用程序常用为LOG_DAEMON与LOG_USER,分别表示守护进程专用日志信息,以及用户级信息,默认为LOG_USER

openlog(3)的调用是可选的,调用syslog(3)将自动调用openlog(3);未调用openlog(3)时,syslog(3)将根据priority指定的方式与优先级记录日志,且日志的标识字符串将被设置为程序名称。

priority由openlog(3)的facility参数之一,与表示日志信息优先级的level之一,进行按位或运算得出level值按优先级从高到低的顺序依次为:

LOG_EMERG:紧急,系统不可用

LOG_ALERT:告警,必须立即采取操作

LOG_CRIT:紧急

LOG_ERR:一般错误

LOG_WARNING:警告

LOG_NOTICE:一般但重要的错误,须特殊处理

LOG_INFO:报告信息

LOG_DEBUG:诊断信息

format参数表示日志信息字符串,与printf(3)的format参数指定方式相同;作为glibc扩展,格式化字符串中的%m序列将被替换为错误信息字符串strerror(errno)而无需参数,syslog(3)会在format指定的日志信息字符串后自动添加换行符。

closelog(3)用于关闭连接syslogd守护进程的文件描述符,由于文件描述符在进程退出后将自动被释放,因此该调用可选。

宏LOG_MASK(level)与LOG_UPTO(level)用于将level宏转换为相应的位掩码,区别在于,每次调用LOG_MASK(level)仅根据level生成单个位掩码,而LOG_UPTO(level)将level及高于level的所有优先级进行转换,然后将所有位掩码进行按位或操作。

setlogmask(3)根据mask指定的level位掩码进行日志信息过滤,mask为经过LOG_MASK(level)或LOG_UPTO(level)转换的值,若syslog(3)中的level值未出现在mask中,则该条日志信息将被忽略。

vsyslog(3)是glibc提供的非标准的日志记录库函数,其中,priority参数与syslog(3)相同,另外2个参数分别与vprintf(3)的format与ap参数的指定方式相同,即通过stdarg(3)系列宏获取可变参数列表。

util-linux软件包提供的logger(1)工具基于syslog(3)实现了系统日志的shell命令接口。

3. 参考

syslog(3)

logger(1)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值