Linux中用C语言写系统日志
__________________________________________________________________________________________________
Author:冀博
Time:2011/11/24
Emaile:jibo.tiger@gmail.com
声明:本人不反对别人和团体转载本人文章,但请注明出处,3Q。对本文有任何疑问,可直接在
博客中留言或发Emaile和我联系(不保证及时回复,时间有限,敬请原谅)
_________________________________________________________________________________________________
我门在做一些大型项目时候,在编写程序中时会考虑到,如果出现一些异常的时候是直接抛出异常呢,还是将异常写入到日志文件中,提供给系统管理员来查看。以下就针对这两种情况分别介绍在Linux中如何将异常写入日志或者是直接抛出异常。
一.抛出异常
在C语言中抛出异常,是用的最多,也是最简单的。因为我们先来talk下它的使用方法。
1.使用exit()函数来实现抛出异常
1>头文件:#include<stdlib.h>
2>当在程序中碰到异常情况时,可以使用exit(),函数直接退出程序,即抛出异常。
3>exit()函数的参数为EXIT_FAILURE,用来表明程序运行失败。
4>实例:当我们在Linux中当开一个文件失败时,使用exit()函数抛出异常。
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<fcntl.h>
int main()
{
int fd;
fd =open(“tiger.c”,O_RDWR);
if( fd < 0){
perror(“OpenFailed\n”);
exit(EXIT_FAILURE);
}
}
执行可执行程序后,如下图所示:
二.将异常写入日志文件
有些时候,我们要将调试信息写入到日志文件中去以便系统管理员去查看;而不是直接退出程序。
1.使用syslog(),openlog(),closelog()函数将调试信息写入日志文件中
1>这三个函数openlog, syslog, closelog是一套系统日志写入接口,另外那个vsyslog和syslog功能一样,只是参数格式不同。
2> 通常,syslog守护进程读取三种格式的记录消息。此守护进程在启动时读一个配置文件。一般来说,其文件名为/etc/syslog.conf,该文件决定了不同种类的消息应送向何处。例如,紧急消息可被送向系统管理员(若已登录),并在控制台上显示,而警告消息则可记录到一个文件中。该机制提供了syslog函数,其调用格式如下
#include <syslog.h>
void openlog (char*ident,int option ,int facility);
void syslog(int priority,char*format,……)
void closelog();
3>调用openlog是可选择的。如果不调用openlog,则在第一次调用syslog时,自动调用openlog。调用closelog也是可选择的,它只是关闭被用于与syslog守护进程通信的描述符。调用openlog 使我们可以指定一个ident,以后, 此ident 将被加至每则记录消息中。ident 一般是程序的名称 。4>openlog及closelog函数说明
此函数原型如下:
void openlog(const char *ident, int option, int facility);
此函数用来打开一个到系统日志记录程序的连接,打开之后就可以用syslog或vsyslog函数向系统日志里添加信息了。而closelog函数就是用来关闭此连接的。
第一个参数ident将是一个标记,ident所表示的字符串将固定地加在每行日志的前面以标识这个日志,通常就写成当前程序的名称以作标记。
第二个参数option是下列值取与运算的结果:LOG_CONS, LOG_NDELAY, LOG_NOWAIT, LOG_ODELAY, LOG_PERROR, LOG_PID,各值意义请参考man openlog手册:
lLOG_CONS:Write directly to system console if there is an error while sendingto system logger.
lLOG_NDELAY:Open the connection immediately (normally, the connection is openedwhen the first message is logged).
lLOG_NOWAIT:Don’t wait for child processes that may have beencreated while logging the message. (The GNU C library does not create a childprocess, so this option has no effect on Linux.)
lLOG_ODELAY: The converse of LOG_NDELAY; opening of the connection is delayeduntil syslog() is called. (This is the default, and neednot be specified.)
lLOG_PERROR:(Not in SUSv3.)Print to stderr as well.
lLOG_PID:Include PID with eachmessage.
第三个参数指明记录日志的程序的类型。
5>syslog函数及参数
syslog函数用于把日志消息发给系统程序syslogd去记录,此函数原型是:void syslog(int priority, const char *format, ...);
第一个参数是消息的紧急级别,第二个参数是消息的格式,之后是格式对应的参数。就是printf函数一样使用。
如果我们的程序要使用系统日志功能,只需要在程序启动时使用openlog函数来连接syslogd程序,后面随时用syslog函数写日志就行了。
2.程序实例:
执行程序后,终端运行没有什么反应,但是要用:
tail /var/log/syslog可以查看系统日志信息
分享到:
相关推荐
Linux中C语言open函数打开或创建文件详细讲解.pdf
LINUX下C语言实现 两个文件合并成第三个文件
c语言读取文件信息 c语言读取文件信息 LINUX LINUX
C语言实现linux下文件逆序,使用系统调用。
很基础的LINUX-C语言学习,linux 操作系统下c 语言编程入门
在Linux下用C语言实现文件拷贝的代码
C语言模拟实现Linux文件系统 1、在内存中开辟一块空间来模拟文件系统的运行,不读写硬盘。 2、面向单用户、单任务,不考虑并发,不考虑文件属主、组等概念。 3、程序开始后,初始化并接收用户输入。若输入”enter”...
Linux中C语言open函数打开或创建文件详细讲解[文].pdf
linux下C编程一站式学习,GCC中文手册,linux下C语言函数库
C语言读取和写入dat文件 注意路径 简单明了 仅供参考
Linux下C语言应用编程》深入浅出地讲解了Linux下C应用程序开发所需的基本工具、知识和技巧,主要包括:开发工具的使用和技巧、文件I/O编程、多进程编程、进程间通信、多线程编程、网络编程等内容。可以让读者轻松、...
在Linux下C语言对文件操作的函数。如:open(),close(),write(),read()的使用。
1.写入日志信息的参数化,类似fprint,printf功能 2.定时保存日志信息到硬盘,默认参数为3000毫秒 3.日志信息达到一定容量后自动保存到硬盘(目前设置为1M) ...9.设置日志等级为__CLOSE_LOGS时,将关闭日志写入功能
作为一个新手学习C语言读写数据,我整合了一下自己查找的一些资料,用C语言实现将一个文件读入内存中,里面有运行工具,和一个word文档代码。
利用c语言实现仿Linux的文件操作,包括: format-格式化; exit-安全退出·文件系统,保存信息; mkdir dirname :创建子目录; rmdir dirname :删除子目录. ls dirname :显示当前目录下信息. cd dirname :更改当前...
linux下C语言实现https请求源码
Linux中C语言实现当前目录下文件查看,包括文件的大小,创建修改时间等属性
C语言文件读取和写入。针对dat文件的读写。 注意文件路径。 程序简单明了 供参考
linux_c语言_fopen函数从文件头读到文件末尾源码
linux C语言学习 linux c 基础 linux c 基础 linux c 基础 linux c 基础