- 论坛徽章:
- 0
|
回复 1楼 rcazy 的帖子
Linux程式设计-syslog
在Linux下有个syslogd的Daemon程式,syslog是个系统管理员必看的档案。因此,如果您的程式有除错或安全讯息要显示,写到syslog是个很好的选择。
syslog有三个函数,使用上,一般您只需要用syslog(...)这个函数即可,一般使用状况下,openlog/closelog是可有可无的。
syslog()中的priority是facility及level的组合,其後参数的用法与printf无异。
头文件:
#include <syslog.h>
void openlog( char *ident, int option, int facility)
void syslog( int priority, char *format, ...)
void closelog( void )
openlog( char *ident, int option, int facility)
ident
此字符串内容一般就是这个程序的名称,它会输出到日志文件中。
option
用於openlog()的option参数可以是以下几个的组合:
LOG_CONS : 如果送到system logger时发生问题,直接写入系统console。
LOG_NDELAY : 立即开启连接(通常,连接是在第一次写入讯息时才打开的)。
LOG_PERROR : 将讯息也同时送到stderr
LOG_PID : 将该程序的PID也写入到日志文件
facility
facility参数用来指定何种程式在记录讯息,这可让设定档来设定何种讯息如何处理。
LOG_AUTH : 安全/授权讯息
LOG_AUTHPRIV : 安全/授权讯息
LOG_CRON : 时间守护神专用(cron及at)
LOG_DAEMON : 其它系统守护神(如telnet,ftp等等)
LOG_KERN : 核心讯息
LOG_LOCAL0到LOG_LOCAL7 : 保留
LOG_LPR : line printer次系统
LOG_MAIL : mail次系统
LOG_NEWS : USENET news次系统
LOG_SYSLOG : syslogd内部所产生的讯息
LOG_USER(default) : 一般使用者等级讯息
LOG_UUCP : UUCP次系统
syslog( int priority, char *format, ...)
priority
决定讯息的重要性. 以下的等级重要性逐次递减:
LOG_EMERG : 系统无法使用
LOG_ALERT : 必须要立即采取反应行动
LOG_CRIT : 重要状况发生
LOG_ERR : 错误状况发生
LOG_WARNING : 警告状况发生
LOG_NOTICE : 一般状况,但也是重要状况
LOG_INFO : 资讯讯息
LOG_DEBUG : 除错讯息
format
这之后的参数用法和printf()一样,见下面例子。
例:
.............................
openlog(appname , LOG_NDELAY, LOG_DAEMON);
syslog(LOG_INFO, "connection from: %s\n", inet_ntoa(sa.sin_addr));
closelog();
.............................
日志文件中会记录:
utelnetd: connection from: 192.168.0.115 |
|