• linux 日志编程(总结)


     转自:http://blog.csdn.net/hemmanhui/article/details/4343844

    日志主要涉及3个函数,分别是openlog、syslog和closelog函数。表8.4所示为这3个函数的具体信息。

     openlog、syslog和closelog函数

    头文件

    <syslog.h>

    函数形式

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

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

    void closelog(void);

    返回值

    成功

    失败

    是否设置errno

     

    说明:openlog函数用于打开系统日志连接。只有在打开连接后,才能使用syslog函数向日志文件中添加日志信息。closelog函数用于关闭打开的系统日志连接,该函数的调用在实现中是可选择的。

     

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

     openlong函数中的option取值表

    参    数

    说    明

    LOG_CONS

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

    LOG_NDELAY

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

    LOG_NOWAIT

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

    LOG_ODELAY

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

    参    数

    说    明

    LOG_PERROR

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

    LOG_PID

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

     

    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也存在对应的关系。

    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函数。

     

    #include <stdio.h>
    #include <syslog.h>

    int main(int argc,char* argv[])
    {
           openlog("HEMM",LOG_CONS | LOG_PID, LOG_USER);

           int count=0;
           while(count<5){
                 syslog(LOG_INFO,"%d, log info test...",count);
                 count++;
          }

          closelog();

          return 0;
    }

     

    调用syslog函数时,指定的priority为LOG_INFO,对应于syslog.conf中的info优先级。而调用openlog函数的facility为LOG_USER,对应于syslog.conf中facility取user的情况。查找syslog.conf中的facility.level为user.info的规则,如图8.7所示。可知,日志文件为/var/log/message。

    由于查看/var/log下的日志需要root权限,使用su切换到root用户。使用tail命令查看message文件中的日志信息,发现相关信息已经通过syslogd守护进程记录在了/var/log/message日志文件中

  • 相关阅读:
    不写helloworld总觉得哪里似乎不对之javascript
    SQl中drop与truncate的区别
    对MarshalByRefObject的讲解(转自DuDu)
    “模态子窗体关闭后,父窗体也关闭”解决方案
    ENVI5.0 32位工具栏图标不显示解决办法
    HTML5的基础写法
    查询远程服务器数据
    javascript变量、作用域和内存问题
    javascript基本概念
    让应用程序具体相应权限
  • 原文地址:https://www.cnblogs.com/zhangxuan/p/6543921.html
Copyright © 2020-2023  润新知