Linux标准系统日志接口之syslog(3)

1. 简介

github项目地址:https://github.com/superwujc

尊重原创,欢迎转载,注明出处:https://my.oschina.net/superwjc/blog/1811027

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 <syslog.h>

void openlog(const char *ident, int option, int facility);
void syslog(int priority, const char *format, ...);
void closelog(void);
int setlogmask(int mask);

#include <stdarg.h>

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)

https://www.rsyslog.com/doc/v8-stable/index.html

转载于:https://my.oschina.net/superwjc/blog/1811027

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值