(8)守护进程之syslog

一、使用syslog来记录调试信息

1、函数原型

       #include <syslog.h>

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

2、作用

(1) openlog() 为程序打开到系统记录器的连接.
(2) syslog()生成一条日志信息,由syslogd(8)分发。
(3) closelog() 关闭用于写入系统日志记录器的文件描述符。closelog()的使用是可选的

openlog

参数

ident : 程序名
option:

LOG_CONS在发送到系统日志记录器时,如果有错误,直接写入系统控制台。
LOG_NDELAY立即打开连接(通常,当记录第一个消息时连接打开)。
LOG_ODELAY 与 LOG_NDELAY的相反;连接的打开被延迟到syslog()被调用。(这是默认值,不需要指定。)
LOG_PERROR(不在POSIX.1-2001或POSIX.1-2008中。)还要将消息记录到stderr。
LOG_PID在每个消息中包含调用者的PID。

facility:参数用于指定记录消息的程序类型。这让配置文件指定来自不同设施的消息将被不同的处理

LOG_AUTH 安全/授权信息
LOG_AUTHPRIV 安全/授权消息(私有)
LOG_CRON时钟守护进程
LOG_DAEMON 没有单独工具值的系统守护进程
LOG_FTP ftp守护进程
LOG_KERN 内核消息(不能从用户进程生成)
LOG_LOCAL7到 LOG_LOCAL0预留给本地使用
LOG_LPR行打印机子系统
LOG_MAIL邮件子系统
USENET新闻子系统由syslogd(8)内部产生的LOG_SYSLOG消息
LOG_USER(默认)通用的用户级消息
LOG_UUCP UUCP子系统

priority:这决定了消息的重要性。这些级别按重要性递减排列如下:

LOG_EMERG系统不可用
LOG_ALERT必须立即采取操作
LOG_CRIT临界条件
LOG_ERR错误条件
LOG_WARNING警告条件
LOG_NOTICE正常但重要的条件
LOG_INFO信息性消息
LOG_DEBUG级的调试信息

函数setlogmask(3)可以用来将日志记录限制在指定的级别

二、编程实战

(1)一般log信息都在操作系统的/var/log/messages这个文件中存储着,但是ubuntu中是在/var/log/syslog文件中的。

代码

#include <stdio.h>
#include <syslog.h>
#include <sys/types.h>
#include <unistd.h>


int main(void)
{
	printf("my pid = %d.\n", getpid());
	
	
	openlog("b.out", LOG_PID | LOG_CONS, LOG_USER);
	
	syslog(LOG_INFO, "this is my log info.%d", 23);
	syslog(LOG_INFO, "this is another log info.");
	syslog(LOG_INFO, "this is 3th log info.");
	
	closelog();
}

syslog的工作原理
(1)操作系统中有一个守护进程syslogd(开机运行,关机时才结束),这个守护进程syslogd负责进行日志文件的写入和维护。
(2)syslogd是独立于我们任意一个进程而运行的。我们当前进程和syslogd进程本来是没有任何关系的,但是我们当前进程可以通过调用openlog打开一个和syslogd相连接的通道,然后通过syslog向syslogd发消息,然后由syslogd来将其写入到日志文件系统中。
(3)syslogd其实就是一个日志文件系统的服务器进程,提供日志服务。任何需要写日志的进程都可以通过openlog/syslog/closelog这三个函数来利用syslogd提供的日志服务。这就是操作系统的服务式的设计。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值