syslog(),closelog()与openlog()--日志操作函数 (2)

文章出处:http://blog.chinaunix.net/uid-26583794-id-3166083.html

守护进程日志的实现

syslogd守护进程用于解决守护进程的日志记录问题,而日志信息保存的位置和记录的信息级别是在syslogd守护进程的配置文件中设定的。守护进程 日志主要涉及3个函数,分别是openlog、syslog和closelog函数。表8.4所示为这3个函数的具体信息。

表8.4   openlog、syslog和closelog函数


头文件


<syslog.h>


函数形式


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

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

void closelog(void);

     

说明:调用openlog是可选择的。如果不调用openlog,则在第一次调用syslog时,自动调用openlog。调用closelog也是可选择的,它只是关闭被用于与syslog守护进程通信的描述符。调用openlog 使我们可以指定一个ident,以后, 此ident 将被加至每则记录消息中。ident 一般是程序的名称(例如 ,cron ,ine 等)

openlog函数中的第1个参数为ident,该参数常用来表示信息的来源。ident指向的字符信息会被固定地添加在每行日志的前面。第2个参数 option用于指定openlog函数和接下来调用的syslog函数的控制标志。option的取值情况如表8.5所示,可以单独取其中的某个值,也 可以通过与运算来获得多种特性。第3个参数为facility,这个要与syslogd守护进程的配置文件对应,日志信息会写入syslog.conf文 件指定的位置。

表8.5   openlong函数中的option取值表


参 数


说 明


LOG_CONS


如果将信息发送给syslogd守护进程时发生错误,直接将相关信息输出到终端


LOG_NDELAY


立即打开与系统日志的连接(通常情况下,只有在产生第一条日志信息的情况下才会打开与日志系统的连接)


LOG_NOWAIT


在记录日志信息时,不等待可能的子进程的创建


LOG_ODELAY


类似于LOG_NDELAY参数,与系统日志的连接只有在syslog函数调用时才会创建


参 数


说 明


LOG_PERROR


在将信息写入日志的同时,将信息发送到标准错误输出(POSIX.1-2001不支持该参数)


LOG_PID


每条日志信息中都包括进程号

参数facility的取值如表8.6所示。这些值与前面syslog.conf中的facility是存在对应关系的。

表8.6   openlog函数参数facility取值


facility参数


syslog.conf中对应的facility取值


LOG_KERN


kern


LOG_USER


user


LOG_MAIL


mail


LOG_DAEMON


daemon


LOG_AUTH


auth


LOG_SYSLOG


syslog


LOG_LPR


lpr


LOG_NEWS


news


LOG_UUCP


uucp


LOG_CRON


cron


LOG_AUTHPRIV


authpriv


LOG_FTP


ftp


LOG_LOCAL0~LOG_LOCAL7


local0~local7

syslog函数中的第一个参数priority表示消息的级别。与openlog函数中的facility参数类似,priority参数与level也存在对应的关系。priority取值和对应关系如表8.7所示。

表8.7   syslog函数参数priority取值


priority参数


syslog.conf中对应的level取值


LOG_EMERG


emerg


LOG_ALERT


alert


LOG_CRIT


crit


LOG_ERR


err


LOG_WARNING


warning


LOG_NOTICE


notice


LOG_INFO


info


LOG_DEBUG


debug

syslog函数的第二个参数为消息的格式,之后是格式对应的参数。函数的使用类似于printf函数。

参考代码如下:

点击(此处)折叠或打开

  1. #include <syslog.h>
  2. int main(int argc, char **argv)
  3. {
  4. syslog(LOG_ERR|LOG_USER,"test
    - %m/n");
  5. openlog("SyslogTest", LOG_CONS | LOG_PID, 0);
  6. syslog(LOG_DEBUG,"This
    is a syslog test message generated by program ‘%s‘/n",argv[0]);
  7. closelog();
  8. return 0;
  9. }

执行结果:#cat /var/log/syslog

时间: 2024-08-26 18:35:20

syslog(),closelog()与openlog()--日志操作函数 (2)的相关文章

syslog(),closelog()与openlog()--日志操作函数 (1)

文章出处:http://blog.csdn.net/xx77009833/archive/2010/07/30/5776383.aspx 为了满足某些目的,进行日志记录是很有必要的. 在典型的 LINUX 安装中,/var/log/messages 包含所有的系统消息,/var/log/mail 包含来自邮件系统的其它日志消息, /var/log/debug 可能包含调试消息.根据你的LINUX的版本,你可以在 /etc/syslog.conf 或者 /etc/syslog-ng/syslog-

syslog(),closelog()与openlog()--日志操作函数

守护进程日志的实现 syslogd守护进程用于解决守护进程的日志记录问题,而日志信息保存的位置和记录的信息级别是在syslogd守护进程的配置文件中设定的.守护进程日志主要涉及3个函数,分别是openlog.syslog和closelog函数.表8.4所示为这3个函数的具体信息. 表8.4   openlog.syslog和closelog函数 头文件 <syslog.h> 函数形式 void openlog(const char *ident, int option, int facilit

关于log4j的日志操作

org.apache.log4j.Logger 详解 概述 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的 :监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作:跟踪代码运行时轨迹,作为日后审计的依据:担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息. 最普通的做法就是在代码中嵌入许多的打印语句,这些打印语句可以输出到控制台或文件中,比较好的做法就是构造一个日志操作类 来封装此类操作,而不是让一系列的打印语句充斥了代码的主体. http://

python日志操作(loggin模块)

loggin模块 import  logging ''' level级别: 可用logging.ERROR.loggin.WARNING等查看 CRITICAL = 50 FATAL = CRITICAL ERROR = 40 WARNING = 30 WARN = WARNING INFO = 20 DEBUG = 10 NOTSET = 0 日志级别大小关系为:CRITICAL > ERROR > WARNING > INFO > DEBUG > NOTSET,当然也可以

Log4j日志操作详细用法

使用Log4j进行日志操作 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作:跟踪代码运行时轨迹,作为日后审计的依据:担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调试信息. 概述 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作:跟踪代码运行时轨迹,作为日后审计的依据:担当集成开发环境中的调试器的作用,向文件或控制台打印代码的调

从零开始的Python学习Episode 14——日志操作

日志操作 一.logging模块 %(message)s 日志信息 %(levelno)s 日志级别 datefmt 设置时间格式 filename 设置日志保存的路径 level 设置日志记录的级别 filemode:文件打开方式,在指定了filename时使用这个参数,默认值为"a"还可指定为"w","a"表示在原有的日志之后增添日志,"w"表示清除原有的日志后再添加新的日志. 配置日志级别.日志格式.输出位置 impor

流处理 —— Spark Streaming中的操作函数

1.1 map(fun) 操作 map操作需要传入一个函数当做参数, 主要作用是,对DStream对象a,将func函数作用到a中的每一个元素上并生成新的元素,得到的DStream对象b中包含这些新的元素. val conf = new SparkConf().setMaster("local[2]").setAppName("file streaming") val sc = new SparkContext(conf) val ssc = new Streami

(二十四)linux新定时器:timefd及相关操作函数

timerfd是Linux为用户程序提供的一个定时器接口.这个接口基于文件描述符,通过文件描述符的可读事件进行超时通知,所以能够被用于select/poll的应用场景. 一,相关操作函数 #include <sys/timerfd.h> int timerfd_create(int clockid, int flags); int timerfd_settime(int fd, int flags, const struct itimerspec *new_value, struct itim

PHP:数组操作函数array_count_values()的实现

    PHP作为一门弱类型的脚本语言,其变量无需声明,即用即得,其数组更是与其他强类型语言相差巨大,比如PHP数组中的关联键和数值键,其中最有趣的莫过于关联键了,这是在C++或JAVA中无法见到的,而且PHP还提供诸多强大的数组操作函数,比如   array_values()//可以剥离数组中的关联键和数值键,或得有其元素的值所组成的数组 array_keys()//获得所有的关联键和数值键  利用这两个函数就可以非常方便简单的实现  array_count_values()函数  思路就是先