3.4.15.使用syslog来记录调试信息

因为 将0、1、2定位到/dev/null 是无法看 到调试信息的

3.4.15.使用syslog来记录调试信息
3.4.15.1、openlog、syslog、closelog

man 3 vsyslog  :  不晓得 为什么是  vsyslog!!!

#include <syslog.h>

1.        void openlog(const char *ident,   int option,    int facility);        打开文件接收 3个参数

                const char *ident : 识别的字符串,设置当前应用程序的名字 (A进程 放个 A...)

                 int option  :  选项, 宏定义                   

                                    LOG_CONS     当我们的写日志文件,日志文件损坏或写不进去,就会把                                          错 误,直接 输出到 当前控制台,如果没有出错,就输出到日志信息  

                                    LOG_PID       发的每一条日志信息,就会包含当前进程 的 pid 

                int facility  :   选项, 宏定义

                                   LOG_AUTH  : 安全 检验认证(密码)

                                     LOG_CRON   : 时间 相关的

                                   LOG_FTP  : 服务器

                                   LOG_USER (default) : 默认的 ,普通的
       
2.        void syslog(int priority,   const char *format, ...);  输出 到 日志文件 系统

                        int priority  : 优先级,日志信息的 重要程度

                                        8个不同的等级 状态
                                       LOG_EMERG      系统马上就死机
                                       LOG_ALERT      立即 处理的 信息
                                       LOG_CRIT      紧急情况 信息
                                       LOG_ERR        错误信息
                                       LOG_WARNING     警告信息
                                       LOG_NOTICE     普通一般的 公共信息
                                       LOG_INFO       系统正常输出信息
                                       LOG_DEBUG      仅仅是 调试信息
3.       void closelog(void);  关闭 日志系统 


3.4.15.2、各种参数
3.4.15.3、编程实战
(1)一般log信息都在操作系统的/var/log/messages这个文件中存储着

但是ubuntu中是在/var/log/syslog文件中的。

                var:临时目录,虚拟临时目录,开机时有,关机就没有了

#include <stdio.h>
#include <syslog.h>


int main(void)
{
	
	/*  1. 打开一个 LOG 文件 */
	openlog("a.out", LOG_PID | LOG_CONS, LOG_USER);
	
	/*  2. syslog 写一条 日志 */
	syslog(LOG_INFO, "this is my long info 我去!");
	
	/*  3. 关闭 日志系统 */
	closelog();
	
	
	
	return 0;
}

运行结果:

 看到 进程 pid 是 5128 , 那么我们再来写一下代码,看看进程 pid 是不是 正确的

代码:

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


int main(void)
{
	/*  0. 打印 当前进程 pid  */
	printf("my pid = %d \n",getpid());
	
	/*  1. 打开一个 LOG 文件 */
	openlog("789.out", LOG_PID | LOG_CONS, LOG_USER);  /* "789.out" (随便给的)当前程序的命令,NULL也可以,*/
	
	/*  2. syslog 写一条 日志 */
	syslog(LOG_INFO, "this is my long info 我去!");
	
	/*  3. 关闭 日志系统 */
	closelog();
	
	
	
	return 0;
}

 运行结果:

 

/*  1. 打开一个 LOG 文件 */
    openlog(NULL, LOG_PID | LOG_CONS, LOG_USER);  /* "789.out" (随便给的)当前程序的命令,NULL也可以,*/

为什么会显示 pid : 因为家里 LOG_PID

也可以多写几条     /*  2. syslog 写一条 日志 */
    syslog(LOG_INFO, "this is my long info 我去!");

用 syslog 打印日志 信息, 比printf 有哪些好处呢?

用printf 打印信息 ,你的控制台 前台一直在打印的输出信息 


3.4.15.4、syslog的工作原理
(1)操作系统中有一个守护进程syslogd(开机运行,关机时才结束),这个守护进程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
发出的红包

打赏作者

大漠飞鹰6666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值