rsyslog配置动态日志文件
近期项目中碰到一个syslog定向日志的问题,使用的是rsyslog(而不是syslog和syslog-ng),需求是根据程序生成syslog日志的syslogtag来将日志定向到$syslogtag.log的文件中,并且使之可以泽时回滚,也就是说文件达到一定大小的时候自动回滚。我对syslog并不是很熟悉,足足看了一下午的手册,实例才有了一个初步印象,然后在第二天上午着手完成自己的工作,第二天下午终于搞定了,然而被领导给否了...不过没有关系,虽然被否了,我还是要将其记录下来,回头用于自己的东西,起码这足足一整天的努力不能付之东流...
我有一个程序VPN,然而会在系统中生成N个实例,N的个数不确定,每个实例我希望将其日志记录在cli_X.log(其中X为自然数)的文件中,然后定义一个规则使之可以在文件大小超过一定量时回滚,我将其rsyslog配置文件放入/etc/rsyslog.d/srv_vpn.conf中,内容为:
#include <syslog.h>#include <stdio.h>#include <stdlib.h>int main(int argc, char **argv){ openlog("cli_12", LOG_PID, LOG_DAEMON); syslog(LOG_DEBUG, "######## test 12 ########"); closelog(); openlog("cli_1223", LOG_PID, LOG_DAEMON); syslog(LOG_DEBUG, "######## test 1223 ########"); closelog(); openlog("cli_1", LOG_PID, LOG_DAEMON); syslog(LOG_DEBUG, "######## test 1 ########"); closelog(); //我在64位机器上测试之,突然在网上发现有人竟然用sizeof(int)来判断 //操作系统的位数,顿时就火了,于是写了了下面的代码,和syslog无关! printf("P is %d\n", sizeof(char *)); printf("I is %d\n", sizeof(int)); return 0;}