发信人: tcpip (俺的昵称改了), 信区: cnunix
标  题: 容易忽视的函数和调用(五)
发信站: 哈工大紫丁香 (Sun Sep 26 15:49:15 1999), 转信

发信人: cpu (奔腾的心), 信区: Solaris
发信站: 华南网木棉站 (Tue Oct 13 17:05:48 1998), 转信


这一节说一下syslog吧, 许多人都知道有这么个函数, 但是不一定都去用它.
意义很明显, 该函数是用来作log的, 可以把错误或者警告信息写到指定的日
志文件或者是控制台console上面去.

     #include <syslog.h>
     void syslog(int priority, char *logstring, /* parameters  */
     ...);

priority指定log信息的level和facility, level指明log的级别, 有0~7八个
级别, 分别是LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR, LOG_WARNING,
LOG_NOTICE, LOG_INFO, LOG_DEBUG, 缺省的是LOG_NOTICE, LOG_DEBUG级别
最低. facility可以用来标识作日志的进程类型, 比如cron和ftp分别有自己
的facility分别是LOG_CRON和LOG_FTP, 缺省的是LOG_USER. 其它还有诸如
LOG_KERN, LOG_MAIL, LOG_UUCP, LOG_NEWS等等, 请看manual.

log的去向? 到文件还是到console? 在/etc/syslog.conf里设置, 比如:

*.err;kern.notice;auth.notice;user.none         /dev/console
*.err;kern.debug;daemon.notice;mail.crit;user.none      /var/adm/messages

*.err, 所有facility的LOG_ERR级别的log同时写入console和/var/adm/messages;
kern.notice, facility为LOG_KERN的进程发出LOG_NOTICE级别的log写入console;
同理你可以定义自己的log行, 比如: local1.notice  /dev/console表示facility
为LOG_LOCAL1, level为notice的日志写入控制台.

参数char *logstring, ...同printf的调用格式. 比如:
syslog(LOG_USER|LOG_ERR, "process %d error", getpid( ));

syslog调用实际上是通过unix域或者udp socket连接syslog发日志请求然后由syslogd
来作日志的, 如果是通过udp的(端口514), 则/etc/hosts里面会有loghost行, 指出
syslogd所在主机, solaris就是这样的, 有一次偶删了loghost, 搞得很多应用出错
做不了log.

syslog一个很大的用处是可以让非root身份的应用程序往console上写信息, 对于有
root权限的应用, 很简单:

        fd = open("/dev/console", O_WRONLY);
        dup2(fd, 2)
        ...
        perror(...) 或者fprintf(stderr, ...);
        ...

但是对于非root身份的应用, open那句肯定出错, 没权限, 所以只好求助于syslog了.
另外还有openlog函数可以在log行头加进程名称和ID以及其它选项, man openlog
man closelog...

--

        ******************************************************
                
               青岛啤酒,可能是世界上最好的啤酒 。。。 。。。

        ******************************************************
※ 修改:.trueip 于 Sep 26 15:53:01 修改本文.[FROM: dns.mtlab.hit.ed]
--
※ 转寄:.华南网木棉站 bbs.gznet.edu.cn.[FROM: dns.mtlab.hit.ed]

--
☆ 来源:.哈工大紫丁香 bbs.hit.edu.cn.[FROM: trueip.bbs@melon.gzn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:5.647毫秒