什么是syslog
syslog最早是由Eric Allman在自己的邮件系统里设计使用的,后来逐渐发展成为很多类Unix系统的标准日志系统。
通过syslog,可以让操作系统中的各个程序的日志统一汇聚到一个中心,然后基于这些日志信息可以进行系统运行状态的分析和程序的调试
现在不通平台上的很多设备,比如打印机,路由器等都在使用syslog这套标准来进行日志的传输和存储
syslog包含哪些
syslog由发送接口和服务组成,发送接口是通过shell执行的logger,以及系统编程接口syslog/openlog/closelog
如何使用syslog
C语言发送接口
void openlog(const char *ident, int option, int facility);
- 创建一个到system logger的连接;可以不掉用该函数,这样在使用syslog的时候会自动调用openlog, indent传入NULL
- ident:会被自动添加到每一条日志消息的前面,一般设置为程序的名称
- option:指定一些日志消息的行为,有以下取值,可以通过或的形式组合
- LOG_CONS:直接输出到系统的console,如果无法发送到system logger的话
- LOG_NDELAY:立刻建立到system logger的连接
- LOG_NOWAIT:不等待子进程创建完成就进行输出日志
- LOG_ODELAY:LOG_NDELAY的相对选项,直到syslogd被调用才会建立连接
- LOG_PERROR:同时打印到标准错误输出
- LOG_PID:日志消息包含PID号,对于后台常驻进程比较有用
- facility:日志源类型,表明该日志产生于系统的哪一类模块
- LOG_AUTH:认证/安全相关
- LOG_AUTHPRIV :认证/安全相关(私有)
- LOG_CRON:定时器
- LOG_DAEMON:系统守护进程
- LOG_FTP:FTP守护继承
- LOG_KERN:内核消息「这个消息不能由用户程序产生」
- LOG_MAIL:邮件相关
- LOG_USER:通用的用户相关的日志,如果没有明确,默认使用LOG_USER
void syslog(int priority, const char *format, ...);
- 产生一条日志信息发送给system logger
- priority:日志信息的级别,以下是级别从高到低
- LOG_EMERG/LOG_ALERT/LOG_CRIT/LOG_ERR/LOG_WARNING/LOG_NOTICE/LOG_INFO/LOG_DEBUG
- 可以通过setlogmask函数来决定过滤的级别
- priority:日志信息的级别,以下是级别从高到低
void closelog(void);
- 关闭连接
void vsyslog(int priority, const char *format, va_list ap);
- syslog的va_list的版本
shell发送接口
logger
- 查看man手册
syslog服务
https://www.pcwdld.com/free-syslog-servers-windows-and-linux
网友评论