[c]代码库
#include "log.h"
/*
data: 2015-11-13
input:
output:
return:
function: 把接收到的IPC日志缓存到队列
*/
int Clog::inqueue_log(netpack_t * netpack)
{
time_t t;
time(&t);
lsg_t *lsg = (lsg_t *)malloc(sizeof(lsg_t));
char *buf=(char *)malloc(MAX_CMD_SIZE);
char *tem=(char *)malloc(MAX_CMD_SIZE);
bzero(buf,MAX_CMD_SIZE);
bzero(tem,MAX_CMD_SIZE);
//1.日志信息处理
//dbg("writing log 1:%s",buf);
sprintf(tem,"%s",ctime(&t));
del_char(tem,'\n');
del_char(tem,'\r');
sprintf(buf,"%.*s,DEV_SN:[%.*s] log message:[%.*s]\n",\
strlen(tem),tem,\
DEV_ID_SIZE,netpack->netdev.dev_sn,\
netpack->datalen,netpack->data);
lsg->log_msg = buf;
lsg->log_type = netpack->log.type;
//2.插入链表
switch(lsg->log_type)
{
case OK:
case INIT_ERR:
case RTMP_DOWN:
case RTMP_UP:
case RTMP_CONNECT_ERR:
case RTMP_NO_CONNECT:
lsg->next = NULL;
if(!loglist.tail)
loglist.tail = lsg;
if(loglist.head)
loglist.head->next = lsg;
loglist.head = lsg;
loglist.log_len++;
break;
case URL_ERROR:
case NET_ERROR:
case SN_ID_ERROR:
lsg->next = NULL;
if(!serlog_list.tail)
serlog_list.tail = lsg;
if(serlog_list.head)
serlog_list.head->next = lsg;
serlog_list.head = lsg;
serlog_list.log_len++;
break;
default:
break;
}
if(tem)
free(tem);
return 0;
}
/*
data: 2015-11-13
input:
output:
return:
function: 把队列里的日志写入文件
*/
int Clog::write_log()
{
int rtmplogfd = 0;
int serverlogfd = 0;
lsg_t *cur_log = loglist.tail;
lsg_t *cur_serverlog= serlog_list.tail;
lsg_t *tem;
//每次写文件前只读一次链表头长度,减少资源竞争
int glog_size = loglist.log_len;
int serverlog_size = serlog_list.log_len;
if((rtmplogfd=open(RTMP_LOG_FILE,O_CREAT|O_WRONLY|O_APPEND,0600))>0)
{
//>1 保证头和尾不重合,防止资源竞争
while(cur_log && (loglist.log_len>1))
{
switch(cur_log->log_type)
{
case OK:
case INIT_ERR:
case RTMP_DOWN:
case RTMP_UP:
case RTMP_CONNECT_ERR:
case RTMP_NO_CONNECT:
write(rtmplogfd,cur_log->log_msg,strlen(cur_log->log_msg));
break;
default:
break;
}
//dbg("%s 1\n",__FUNCTION__);
if(cur_log->log_msg)
free(cur_log->log_msg);
//dbg("%s 2\n",__FUNCTION__);
if(cur_log)
free(cur_log);
//dbg("%s 3\n",__FUNCTION__);
cur_log = cur_log->next;
loglist.tail = cur_log;
glog_size--;
}
if(rtmplogfd)
close(rtmplogfd);
}
//平台日志直接写入
#if 0
if((serverlogfd=open(PLATFORM_LOG,O_CREAT|O_WRONLY|O_APPEND,0600))>0)
{
//>1 保证头和尾不重合,防止资源竞争
while(cur_serverlog && (serlog_list.log_len > 1))
{
switch(cur_serverlog->log_type)
{
case URL_ERROR:
case NET_ERROR:
case SN_ID_ERROR:
write(serverlogfd,cur_serverlog->log_msg,strlen(cur_serverlog->log_msg));
break;
default:
break;
}
//dbg("%s 3\n",__FUNCTION__);
if(cur_serverlog->log_msg)
free(cur_serverlog->log_msg);
if(cur_serverlog)
free(cur_serverlog);
//dbg("%s 4\n",__FUNCTION__);
cur_serverlog = cur_serverlog->next;
serlog_list.tail = cur_serverlog;
serverlog_size--;
}
if(serverlogfd)
close(serverlogfd);
}
#endif
return 0;
}
/*
data: 2015-12-8
input:
output:
return:
function: 平台日志
*/
void Clog::platform_log(const char *msg)
{
int fd,buf_size;
time_t t;
char *buf=(char *)malloc(MAX_CMD_SIZE);
char *tem=(char *)malloc(MAX_CMD_SIZE);
bzero(buf,MAX_CMD_SIZE);
bzero(tem,MAX_CMD_SIZE);
time(&t);
//dbg("writing log 1:%s",buf);
sprintf(tem,"%s",ctime(&t));
del_char(tem,'\n');
del_char(tem,'\r');
sprintf(buf,"%.*s %s\n",strlen(tem),tem,msg);
//dbg("writing platfrom log 2:%s",buf);
buf_size = strlen(buf);
if((fd=open(PLATFORM_LOG,O_CREAT|O_WRONLY|O_APPEND,0600))>0)
{
write(fd,buf,buf_size);
close(fd);
}
if(buf)
free(buf);
if(buf)
free(tem);
}
by: 发表于:2017-06-20 16:13:30 顶(0) | 踩(0) 回复
??
回复评论