目录
守护进程的标准终端已定位在空设备上,当进程中出现错误时,无法将错误再输出到终端上,
需要通过系统日志记录进程中的错误。
#include <syslog.h>
void openlog(const char *ident, int option, int facility);
//参数1 ----ident: 字符串,它将添加在信息message的前面
//参数2 ----option:一般使用LOG_PID,在消息中增加进程号
//参数3 ----facility: 指明应用进程的类型
LOG_DAEMON 守护进程
LOG_FTP ftp服务进程
LOG_KERN 内核进程
LOG_LPR 打印系统
LOG_MAIL 邮件系统
LOG_NEWS 网络新闻系统
LOG_SYSLOG 日志系统
LOG_USER 用户进程
void syslog(int priority, const char *format, ...);
//参数1 ----- priority:消息的优先级
LOG_EMERG 非常紧急的消息
LOG_ALERT 应当立即纠正的错误
LOG_CRIT 硬件错误
LOG_ERR 错误信息
LOG_WARNING 警告信息
LOG_NOTICE 需要注意的消息
LOG_INFO 正常信息
LOG_DEBUG 调试信息
//参数2 --- format:消息的格式控制串
//变参: 与printf中的变参功能类似
void closelog(void);
例如:
- int main(void)
- {
- daemon_init(); //初始化守护进程
- /*****************下面为守护进程执行的代码*******************/
- //每隔一秒钟向文件中写一条时间信息
- FILE *fp;
- time_t tm;
- char buf[100];
-
- //打开系统日志文件
- openlog("测试日志",LOG_PID,LOG_DAEMON);
-
- fp = fopen("1.txt","r");
- if(NULL==fp){
- //向日志文件中记录进程错误信息
- syslog(LOG_ERR,"fopen:%s\n",strerror(errno));
- exit(1);
- }
- while(1){
- time(&tm);
- sprintf(buf,"%s",ctime(&tm));
- fputs(buf,fp);
- fflush(fp);
- sleep(1);
- }
- //关闭系统日志文件
- closelog();
-
- return 0;
- }
消息记录在日志文件中: /var/log/syslog
方法一:直接打开日志文件查看 /var/log/syslog
162 Aug 10 14:30:44 yutou测试日志[8356]: fopen:No such file or directory
方法二:通过命令grep查找进程的记录的信息
yutou@ubuntu:~/2206/process/day02_code$ grep 测试日志 /var/log/syslog -n
162:Aug 10 14:30:44 farsight 测试日志[8356]: fopen:No such file or directory