- 论坛徽章:
- 0
|
//the follow code redefine LOG to save all the log into
//the new file DHCP_LOG_FILE_PATH
#define COREGA_LOG_DHCPD 1
#ifndef COREGA_LOG_DHCPD
void udhcp_logging(int level, const char *fmt, ...)
{
va_list p;
va_list p2;
va_start(p, fmt);
__va_copy(p2, p);
if(!daemonized) {
vprintf(fmt, p);
putchar('\n');
}
vsyslog(level, fmt, p2);
va_end(p);
}
#else //COREGA save the dhcp log another place
#define LOG(level, str, args...) udhcp_logging(level, str, ## args)
#define DHCP_LOG_FILE_PATH "/var/log/messages_dhcp"
#define MAX_LOG_FILE_SIZE 10000 //10k
long int GetFilesize(FILE *stream)
{
long curpos, length;
curpos = ftell(stream);
fseek(stream, 0L, SEEK_END);
length = ftell(stream);
fseek(stream, curpos, SEEK_SET);
return length;
}
void udhcp_logging(int level, const char *fmt, ...)
{
va_list args;
char m_szTempLogLine[4096];
char *pTmpData =m_szTempLogLine;
time_t ltime;
FILE* m_hLogFile;
long int lFileSize;
time(<ime);
pTmpData += sprintf(pTmpData,"%s ",ctime(<ime));
//change the enter to be space
*(pTmpData-3)=' ';
va_start(args, fmt);
pTmpData += vsprintf(pTmpData, fmt, args); //Note that we are using the C runtime here!!
va_end(args);
//add a enter
pTmpData += sprintf(pTmpData,"\n");
m_hLogFile = fopen(DHCP_LOG_FILE_PATH,"a");
if (m_hLogFile == NULL) {
return ;
}
lFileSize = GetFilesize(m_hLogFile);
if(fwrite(m_szTempLogLine,sizeof(char),strlen(m_szTempLogLine),m_hLogFile)!=strlen(m_szTempLogLine)
||lFileSize>=(long)MAX_LOG_FILE_SIZE)
{
//appand error, clear it and rewrite it
fclose(m_hLogFile);char scmd[200];sprintf(scmd,"%s %s
%d","/usr/sbin/process_log_file.sh",DHCP_LOG_FILE_PATH,100);system(scmd);
m_hLogFile = fopen(DHCP_LOG_FILE_PATH,"a");
fwrite(m_szTempLogLine,sizeof(char),strlen(m_szTempLogLine),m_hLogFile);
}
fclose(m_hLogFile);
return ;
}
#endif
本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/66373/showart_545609.html |
|