GNU Linux syslog守护进程简介及syslog日志写入例子

rsyslog进程

syslog是记录系统中的日志记录的一个工具,可以支持本地的、也可以支持远程的日志的写入。

在LinuxMint环境中,基于upstart的机制的后台守护程序是放在/etc/init/目录下的,可使用下如下的命令进行查看具体的启动脚本:

[email protected]:/var/log$ less /etc/init/rsyslog.conf

查看当前rsyslogd是否已经启动:

[email protected]:/var/log$ initctl list | grep rsyslog

rsyslog start/running, process 634

  4、灵活运用syslog调用接口

  在实际的使用过程中,我们可以通过配置文件和查看相应的日志文件来使用syslog。然而,在许多应用场景下,我们往往需要通过程序产生输出信息并进 行记录,也就是说要把一些信息写成日志文件,下面将详细介绍如何通过syslog日志系统提供的API调用接口,来使用程序实现对syslog的使用。

  1.主要的函数

  在Linux中,提供了四个有关syslog日志系统的系统调用,供用户使用:

  openlog:打开日志设备,以供读取和写入,与文件系统调用的open类似;

  syslog:写入日志,与文件系统调用的write类似;

  closelog:关闭日志设备,与文件系统调用的close类似;

  vsyslog:它和syslog功能一样,负责写入日志,只是参数格式不同。

  (1)openlog函数

  该函数的声明如下:

  void openlog(const char *ident, int option, int facility);

  此函数用来打开一个到系统日志记录程序的连接,打开之后就可以用syslog或vsyslog函数向系统日志里添加信息了。而closelog函数就是用来关闭此连接的。

  openlog的第一个参数ident是一个标记,ident所表示的字符串将固定地加在每行日志的前面以标识这个日志,通常就写成当前程序的名称以作标记。第二个参数option一般是下列选项值取“与”运算(使用“|”表示,如“LOG_CONS | LOG_PID”)的结果:

  LOG_CONS:如果送到system logger时发生问题,直接写入系统终端;

  LOG_NDELAY:立即开启连接,通常连接是在第一次写入消息时才打开的;

  LOG_PERROR:将消息也同时送到stderr设备;

  LOG_PID:将进程PID含入所有消息中。

  第三个参数facility指明记录日志的程序的类型,它主要具有如下几类日志类型:

  LOG_AUTH :安全/授权消息

  LOG_AUTHPRIV:安全/授权消息

  LOG_CRON:时间守护进程(cron和at)专用

  LOG_DAEMON:其它系统守护进程

  LOG_KERN:核心消息

  LOG_LOCAL0到LOG_LOCAL7:系统保留

  LOG_LPR:printer子系统

  LOG_MAIL:mail子系统

  LOG_NEWS:USENET新闻子系统

  LOG_SYSLOG:syslogd进程内部所产生的消息

  LOG_USER(缺省):一般使用者缺省使用消息

  LOG_UUCP:UUCP子系统

  LOG_FTP:FTP子系统使用

  (2)syslog函数

  syslog函数的声明如下:

  void syslog(int priority, const char * message, ...);

  第一个参数是消息的紧急级别priority,第二个参数是消息及其格式,之后是格式对应的参数,如同C语言里面printf输出函数一样使用,具体的格式这里就不再详述,它不是本书介绍的重点。

  这里还需要详细介绍一下第一个参数priority,它是由severity level和facility组成的。Facility已经在上面介绍了,下面介绍一下severity level,也就是消息的重要级别,它主要包括:

  LOG_EMERG:紧急状况

  LOG_ALERT:高优先级问题,比如说数据库崩溃等,必须要立即采取反应行动

  LOG_CRIT:重要状况发生,比如硬件故障

  LOG_ERR:错误发生

  LOG_WARNING:警告发生

  LOG_NOTICE:一般状况,需要引起注意

  LOG_INFO:信息状况

  LOG_DEBUG:调试消息

  在实际使用中,如果我们的程序要使用系统日志功能,只需要在程序启动时使用openlog函数来连接syslogd程序,后面随时用syslog函数写日志就行了。

  (3)closelog函数

  相对上述2个函数来说,该函数非常简单,其声明如下:

  void closelog( void );

  值得注意的是,虽然该函数的使用和调用情况非常简单,但是是必不可少的,因为在Linux系统中,打开的日志也是资源,如果只使用openlog函数 打开日志,而忘记使用closelog关闭日志的话,当打开的日志数量累积到一定程度,便会造成内存不足,从而引起系统问题。所以,提醒用户在使用中特别 注意。

测试的例子:

#include <stdio.h>

#include <syslog.h>

int main()

{

int log_test;

openlog("log_test",LOG_PID,LOG_USER);

syslog(LOG_INFO,"PID information, pid=%d\n",getpid());

syslog(LOG_DEBUG,"debug message");

closelog();

}

可以查看/var/log/syslog文件中的最后是否出现了以上的打印信息,可使用less /var/log/syslog命令打开后,跳转到文件的尾部进行查看:

Dec 15 17:46:27 ufo log_test[7811]: PID information, pid=7811

Dec 15 17:46:27 ufo log_test[7811]: debug message

时间: 2024-11-14 22:10:25

GNU Linux syslog守护进程简介及syslog日志写入例子的相关文章

Linux守护进程简介和实例详解

简介 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种很有用的进程.Linux的大多数服务器就是用守护进程实现的.比如,Internet服务器inetd,Web服务器httpd等.同时,守护进程完成许多系统任务.比如,作业规划进程crond,打印进程lpd等. 下面是linux系统中常见的一些守护进程. amd:自动安装NFS(网络文件系统)守侯进程apmd:高级电源管理 Arpwatch:记录日志并构建一个在L

深入理解Linux操作系统守护进程的意义

Linux服务器在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户.提供这些服务的程序是由运行在后台的守护进程(daemons)来执行的.守护进程是生存期长的一种进程.它们独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.他们常常在系统引导装入时启动,在系统关闭时终止.linux系统有很多守护进程,大多数服务器都是用守护进程实现的.同时,守护进程完成许多系统任务,比如,作业规划进程crond.打印进程lqd等.有些书籍和资料也把

编写Linux/Unix守护进程

原文: http://www.cnblogs.com/haimingwey/archive/2012/04/25/2470190.html 守护进程在Linux/Unix系统中有着广泛的应用.有时,开发人员也想把自己的程序变成守护进程.在创建一个守护进程的时候,要接触到子进程.进程组.会晤期.信号机制.文件.目录和控制终端等多个概念.因此守护进程还是比较复杂的,在这里详细地讨论Linux/Unix的守护进程的编写,总结出八条经验,并给出应用范例. 编程要点 1.屏蔽一些有关控制终端操作的信号.防

linux 创建守护进程的相关知识

linux 创建守护进程的相关知识 http://www.114390.com/article/46410.htm linux 创建守护进程的相关知识,这篇文章主要介绍了linux 创建守护进程的相关知识,需要的朋友可以参考下 关键字:linux.守护进程 创建子进程,父进程退出 这是编写守护进程的第一步.由于守护进程是脱离控制终端的,因此,完成第一步后就会在Shell终端里造成一程序已经运行完毕的假象.之后的所有工作都在子进程中完成,而用户在Shell终端里则可以执行其他命令,从而在形式上做到

linux C守护进程编写

linux编程-守护进程编写 守护进程(Daemon)是运行在后台的一种特殊进程.它独立于控制终端并且周期性地执行某种任务或等待 处理某些发生的事件.守护进程是一种很有用的进程. Linux的大多数服务器就是用守护进程实现的.比如,Internet服务器inetd,Web服务器httpd等. 同时,守护进程完成许多系统任务.比如,作业规划进程crond,打印进程lpd等. 守护进程的编程本身并不复杂,复杂的是各种版本的Unix的实现机制不尽相同, 造成不同 Unix环境下守护进程的编程规则并不一

asp.net core2.0 部署centos7/linux系统 --守护进程supervisor(二)

原文:asp.net core2.0 部署centos7/linux系统 --守护进程supervisor(二) 续上一篇文章:asp.net core2.0 部署centos7/linux系统 --安装部署(一),遗留的问题而来,对程序添加守护进程,使网站可以持续化的运行起来. ? 1.介绍supervisor ?? ?Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,

写一个Windows上的守护进程(4)日志其余

写一个Windows上的守护进程(4)日志其余 这次把和日志相关的其他东西一并说了. 一.vaformat C++日志接口通常有两种形式:流输入形式,printf形式. 我采用printf形式,因为流输入不好控制格式. printf形式要求日志接口支持不定长参数,我没有直接在日志实现类里边支持不定长参数,而是只接受一个字符串参数,可以参见第一篇. 为什么呢? 如果要成为不定长参数,就是这样 bool log_string(const LOG_LEVEL level, const char* fi

浅谈Linux下的syslog守护进程

syslog是Linux下默认的日志守护进程.任何希望生成日志信息的程序都可以通过syslog 接口实现该目的. 同时,几乎所有的网络设备都可以通过syslog协议,将日志信息以UDP的形式传送给远端服务器,远端接收日志服务器必须通过syslogd监听UDP端口514,并根据 syslog.conf 配置文件张的配置处理.配置文件 /etc/rsyslog.conf 中规定了syslogd如何根据设备和信息的重要级别来报告信息. 这里只需要有个大致了解即可,下面都会提到这些东西. 关于配置文件:

linux下守护进程的创建

最近在学习linux c编程 看到了守护进程的创建,感觉很好玩, 测试环境ubuntu 15.04 下面贴出测试代码 #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <signal.h> #include <sys/param.h> #include <sys/stat.h> #include <time.h> #include <