c语言库函数syslog--将信息记录至系统日志文件
参见 《unix 环境高级编程》第13 章 精灵进程
在Linux下有个syslogd的Daemon程式,syslog是个系统管理员必看的档案。因此,如果您的程式有除错或安全讯息要显示,写到syslog是个很好的选择。
syslog有三个函数,使用上,一般您只需要用syslog(...)这个函数即可,一般使用状况下,openlog/closelog是可有可无的。
syslog()中的priority是facility及level的组合,其後参数的用法与printf无异。
范例:
#include
#include
#include
#include
void main(void)
{
if (fork()==0) {
for (;;) {
syslog(LOG_USER|LOG_INFO,"syslog programming test/n");
sleep(10);
}
}
}
检验:
tail -f /var/log/messages
Mar 22 01:42:51 foxman log: syslog programming test
Mar 22 01:43:31 foxman last message repeated 4 times
Mar 22 01:44:31 foxman last message repeated 6 times
Mar 22 01:45:31 foxman last message repeated 6 times
Mar 22 01:46:21 foxman last message repeated 5 times
--------------------------------------------------------------------------------
void openlog( char *ident, int option, int facility)
void syslog( int priority, char *format, ...)
void closelog( void )
option
用於openlog()的option参数可以是以下几个的组合:
LOG_CONS : 如果送到system logger时发生问题,直接写入系统console。
LOG_NDELAY : 立即开启连接(通常,连接是在第一次写入讯息时才打开的)。
LOG_PERROR : 将讯息也同时送到stderr
LOG_PID : 将PID含入所有讯息中
facility
facility参数用来指定何种程式在记录讯息,这可让设定档来设定何种讯息如何处理。
LOG_AUTH : 安全/授权讯息(别用这个,请改用LOG_AUTHPRIV)
LOG_AUTHPRIV : 安全/授权讯息
LOG_CRON : 时间守护神专用(cron及at)
LOG_DAEMON : 其它系统守护神
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次系统
level
决定讯息的重要性. 以下的等级重要性逐次递减:
LOG_EMERG : 系统无法使用
LOG_ALERT : 必须要立即采取反应行动
LOG_CRIT : 重要状况发生
LOG_ERR : 错误状况发生
LOG_WARNING : 警告状况发生
LOG_NOTICE : 一般状况,但也是重要状况
LOG_INFO : 资讯讯息
LOG_DEBUG : 除错讯
配置文件:
/etc/syslog-ng/syslog-ng.conf
2句是一个过滤,表明运行程序chentest的日志写入/var/log/chentest.log里,当然最后要记得定义非chentest的程序日志写入/var/log/messages里,否则LINUX仍然会写chentest的日志到message里面.
完整的配置文件
# $Header: /var/cvsroot/gentoo-x86/app-admin/syslog-ng/files/syslog-ng.conf.gentoo,v 1.5 2005/05/12 05:46:10 mr_bones_ Exp $
#
# Syslog-ng default configuration file for Gentoo Linux
# contributed by Michael Sterrett
options {
chain_hostnames(off);
sync(0);
# The default action of syslog-ng 1.6.0 is to log a STATS line
# to the file every 10 minutes. That's pretty ugly after a while.
# Change it to every 12 hours so you get a nice daily update of
# how many messages syslog-ng missed (0).
stats(43200);
};
source src { unix-stream("/dev/log"); internal(); pipe("/proc/kmsg"); };
destination messages { file("/var/log/messages"); };
destination creatidf_log { file("/var/log/caocreatidf.log"); };
destination daily_log { file("/var/log/caodaily.log"); };
# By default messages are logged to tty12...
destination console_all { file("/dev/tty12"); };
filter creatidf { program("creatidf"); };
filter daily { program("daily"); };
filter n_creatidf { not program("creatidf"); };
filter n_daily { not program("daily"); };
# ...if you intend to use /dev/console for programs like xconsole
# you can comment out the destination line above that references /dev/tty12
# and uncomment the line below.
#destination console_all { file("/dev/console"); };
l og { source(src); destination(messages); };
log { source(src); filter(creatidf); destination(creatidf_log); };
log { source(src); filter(daily); destination(daily_log); };
log { source(src); filter(n_creatidf); filter(n_daily); destination(messages); };
log { source(src); destination(console_all); };
http://www.linuxselfhelp.com/gnu/glibc/html_chapter/libc_18.html