用户注册



邮箱:

密码:

用户登录


邮箱:

密码:
记住登录一个月忘记密码?

发表随想


还能输入:200字
云代码 - c代码库

log

2016-11-03 作者:evol举报

[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);
}



分享到:
更多

网友评论    (发表评论)

共1 条评论 1/1页

发表评论:

评论须知:

  • 1、评论每次加2分,每天上限为30;
  • 2、请文明用语,共同创建干净的技术交流环境;
  • 3、若被发现提交非法信息,评论将会被删除,并且给予扣分处理,严重者给予封号处理;
  • 4、请勿发布广告信息或其他无关评论,否则将会删除评论并扣分,严重者给予封号处理。