完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 michael_llh 于 2016-9-30 17:50 编辑
使用syslog来记录相应的调试信息,这个是我们在大型程序中会用到的一种调试方法,我们在单片机这种层面上我们会用到所谓的单步调试,但是到了Linux系统层面,我们是没有办法这样子去单步调试的,除了直接使用printf直观的打印相应的系统信息以为,我们还会使用log这样的方式来进行调试,相信大家在使用电脑软件的过程也会遇到这样的概念,这里我们来看下如何使用我们的Linux的syslog。 首先我们需要看一下syslog的相关函数: #include void openlog(const char *ident, int option, int facility); void syslog(int priority, const char *format, ...); void closelog(void); 我们需要包含一个syslog的头文件,相关的函数有三个。 一般情况下Linux系统的话log文件是存放在我们的/var/log/messages的目录下面,这是一般情况下,针对不同的发行版会有出入,在ubuntu环境下是存放在我们的/usr/log/syslog这个目录下面。 之前我们提到过一个守护进程,syslogd这个进程,就是来维护和提供相应的syslog服务的。那么我们可以通过Linux的系统API openlog打开一个通道和我们的syslog连接,这样我们就可以向syslogd发送消息,然后syslogd这个进程会接收我们的消息,写到相应的日志文件系统中。 下面我们通过实际代码测试一下: 首先我们需要使用openlog函数: void openlog(const char *ident, int option, int facility); 第一个参数:标识符,可以写我们自己能够识别的程序标记 第二个参数: LOG_CONS:Write directly to system console if there is an error while sending to system logger. LOG_NDELAY:Open the connection immediately (normally, the connection is opened when the first message is logged). LOG_NOWAIT:Don't wait for child processes that may have been created while logging the message. (The GNU C library does not create a child process, so this option has no effect on Linux.) LOG_ODELAY:The converse of LOG_NDELAY; opening of the connection is delayed until syslog() is called. (This is the default, and need not be specified.) LOG_PERROR:(Not in POSIX.1-2001 or POSIX.1-2008.) Print to stderr as well. LOG_PID:Include PID with each message. 第三个参数: LOG_AUTH security/authorization messages LOG_AUTHPRIV security/authorization messages (private) LOG_CRON clock daemon (cron and at) LOG_DAEMON system daemons without separate facility value LOG_FTP ftp daemon LOG_KERN kernel messages (these can't be generated from user processes) LOG_LOCAL0 through LOG_LOCAL7 reserved for local use LOG_LPR line printer subsystem LOG_MAIL mail subsystem LOG_NEWS USENET news subsystem LOG_SYSLOG messages generated internally by syslogd(8) LOG_USER (default) generic user-level messages 这些内容的话man手册当中都有提到,这里复制出来方便大家查看,具体的话就不翻译了。 第二个函数的话就是syslog,写入我们的log信息了。 void syslog(int priority, const char *format, ...); 第一个参数:priority就是一个优先级的意思,就是我们可以设定syslog的等级,比如说警告啊,或者是严重警告,需要立即处理等等这种的。 LOG_EMERG system is unusable LOG_ALERT action must be taken immediately LOG_CRIT critical conditions LOG_ERR error conditions LOG_WARNING warning conditions LOG_NOTICE normal, but significant, condition LOG_INFO informational message LOG_DEBUG debug-level message 第二个参数: 这里就可以写入一个log的字符串了。 第三个参数: 三个。。。表示的是可变参数,和printf是类似的可变参数。 下面我们看下程序实现:
之后使用cat /var/log/syslog进行查看。 |
|
|
|
只有小组成员才能发言,加入小组>>
「含关键代码」基于AM3352/AM3354/AM3359的Linux开发案例分享
4874 浏览 0 评论
87366 浏览 0 评论
【高手问答】如何做到精通linux技术?资深工程师带你突破难点
4687 浏览 2 评论
3581 浏览 2 评论
解读Linux :先从创建一个文件夹用来存放jdk压缩文件开始
2459 浏览 0 评论
1963浏览 3评论
这是i.mx6ull的关于usb的宏定义,能解释下这些宏定义的意思
1329浏览 1评论
1241浏览 1评论
求解:aarch64交叉编译工具已经安装成功,环境变量已经配置,怎么将系统架构切换为ARM的架构
1307浏览 0评论
电脑和虚拟机可以互ping,电脑和开发板也可以互ping,但是虚拟机和开发板ping不通是什么原因
1215浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-1 14:36 , Processed in 0.973958 second(s), Total 40, Slave 33 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号