1、rsyslog配置文件,/etc/rsyslog.conf,在配置文件中加入如下配置项。
local2.* /var/log/udp_send/udp_send.loglocal2.* /var/log/udp_send/udp_send.log
2、在/etc/logrotate.d/目录下,加入log文件配置项,新建立配置文件。内容如下:
/var/log/udp_send/udp_send.log { create 0777 root root daily rotate 10 missingok notifempty copytruncate sharedscripts prerotate /usr/bin/chattr -a /var/log/udp_send/udp_send.log endscript postrotate /usr/bin/kill -HUP rsyslogd /usr/bin/chattr +a /var/log/udp_send/udp_send.log endscript }
void openlog(const char *ident, int option, int facility);
idents指向的字符串可以是想要打出的任意字符,它所表示的字符串将固定地加在每行日志的前面以标识这个日志,该标志通常设置为程序的名称。
option参数所指定的标志用来控制openlog()操作和syslog()的后续调用。他的值为具体是下列值取与运算的结果
LOG_CONS
直接写入系统控制台,如果有一个错误,同时发送到系统日志记录。
LOG_NDELAY
立即打开连接(通常,打开连接时记录的第一条消息)。
LOG_NOWAIT
不要等待子进程,因为其有可能在记录消息的时候就被创建了(GNU C库不创建子进程,所以该选项在Linux上没有影响。)
LOG_ODELAY
延迟连接的打开直到syslog函数调用。(这是默认情况下,需要没被指定的情况下。)
LOG_PERROR
(不在SUSv3情况下)同时输出到stderr(标准错误文件)。
LOG_PID
包括每个消息的PID。
facility参数是用来指定记录消息程序的类型。它让指定的配置文件,将以不同的方式来处理来自不同方式的消息。它的值可能为 LOG_KERN、LOG_USER、LOG_MAIL、LOG_DAEMON、LOG_AUTH、LOG_SYSLOG、LOG_LPR、LOG_NEWS、LOG_UUCP、LOG_CRON 或 LOG_AUTHPRIV
各个值的具体意义我们可以参照man openlog 手册。
LOG_AUTH
security/authorization messages (DEPRECATED Use LOG_AUTHPRIV
instead)
LOG_AUTHPRIV
security/authorization messages (private)
LOG_CRON
clock daemon (cron and at)
LOG_DAEMON
system daemons without separate facility value
LOG_FTP
ftp daemon
LOG_KERN
kernel messages
LOG_LOCAL0 through LOG_LOCAL7
reserved for local use
LOG_LPR
line printer subsystem
LOG_MAIL
mail subsystem
LOG_NEWS
USENET news subsystem
LOG_SYSLOG
messages generated internally by syslogd
LOG_USER (default)
generic user-level messages
LOG_UUCP
UUCP subsystem
int syslog(int priority, string message);
void closelog( void )
#include <syslog.h> #define US_ERR(fmt, args...) syslog(LOG_LOCAL2 | LOG_ERR, "(ERR) %s %s %d: " fmt "\n", __FILE__, __FUNCTION__, __LINE__, ##args) #define US_DEBUG(fmt, args...) \ if (g_debug) {\ syslog(LOG_LOCAL2 | LOG_DEBUG, "(DEBUG) %s %s %d: " fmt "\n", __FILE__, __FUNCTION__, __LINE__, ##args);\ } #define US_WARN(fmt, args...) syslog(LOG_LOCAL2 | LOG_WARNING, "(WARN) %s %s %d: " fmt "\n", __FILE__, __FUNCTION__, __LINE__, ##args) openlog("udp-send", 0, LOG_LOCAL2); US_DEBUG("just a test case"); closelog
void * pthread_log_ctrl(void * arg) { while(1) { system("/etc/init.d/rsyslog restart > /dev/null"); system("logrotate -f /etc/logrotate.d/cmdp_udp_send_logcfg"); sleep(3600); } pthread_exit(NULL); }
udp_send.log udp_send.log.1 udp_send.log.10 udp_send.log.2 udp_send.log.4 udp_send.log.5 udp_send.log.6 udp_send.log.7 udp_send.log.8 udp_send.log.9