古老的日志系统Syslog

什么是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函数来决定过滤的级别

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容