[C] log →→→→→进入此内容的聊天室

来自 , 2019-08-05, 写在 C, 查看 98 次.
URL http://www.code666.cn/view/24e27b86
  1. #include "log.h"
  2.  
  3.  
  4. /*
  5. data:      2015-11-13
  6. input: 
  7. output:
  8. return:                
  9. function:         把接收到的IPC日志缓存到队列
  10.  
  11. */
  12.  
  13. int Clog::inqueue_log(netpack_t * netpack)
  14. {
  15.         time_t t;
  16.         time(&t);
  17.         lsg_t *lsg = (lsg_t *)malloc(sizeof(lsg_t));   
  18.         char *buf=(char *)malloc(MAX_CMD_SIZE);
  19.         char *tem=(char *)malloc(MAX_CMD_SIZE);
  20.         bzero(buf,MAX_CMD_SIZE);
  21.         bzero(tem,MAX_CMD_SIZE);
  22.         //1.日志信息处理
  23.         //dbg("writing log 1:%s",buf);
  24.         sprintf(tem,"%s",ctime(&t));
  25.         del_char(tem,'\n');
  26.         del_char(tem,'\r');
  27.        
  28.         sprintf(buf,"%.*s,DEV_SN:[%.*s] log message:[%.*s]\n",\
  29.                 strlen(tem),tem,\
  30.                 DEV_ID_SIZE,netpack->netdev.dev_sn,\
  31.                 netpack->datalen,netpack->data);               
  32.         lsg->log_msg = buf;
  33.        
  34.         lsg->log_type = netpack->log.type;
  35.  
  36.         //2.插入链表
  37.         switch(lsg->log_type)
  38.                 {
  39.                         case OK:
  40.                         case INIT_ERR:
  41.                         case RTMP_DOWN:
  42.                         case RTMP_UP:
  43.                         case RTMP_CONNECT_ERR:
  44.                         case RTMP_NO_CONNECT:
  45.                                 lsg->next = NULL;
  46.                                 if(!loglist.tail)
  47.                                         loglist.tail = lsg;
  48.                                 if(loglist.head)
  49.                                         loglist.head->next = lsg;
  50.                                 loglist.head = lsg;
  51.                                 loglist.log_len++;
  52.                                 break;
  53.                         case URL_ERROR:
  54.                         case NET_ERROR:
  55.                         case SN_ID_ERROR:
  56.                                 lsg->next = NULL;
  57.                                 if(!serlog_list.tail)
  58.                                         serlog_list.tail = lsg;
  59.                                 if(serlog_list.head)
  60.                                         serlog_list.head->next = lsg;
  61.                                 serlog_list.head = lsg;
  62.                                 serlog_list.log_len++;
  63.                                 break;
  64.                         default:
  65.                                 break;
  66.                 }
  67.         if(tem)
  68.                 free(tem);
  69.         return 0;
  70. }
  71.  
  72.  
  73. /*
  74. data:      2015-11-13
  75. input: 
  76. output:
  77. return:    
  78.                
  79. function:         把队列里的日志写入文件
  80.  
  81. */
  82.  
  83. int Clog::write_log()
  84. {
  85.         int rtmplogfd = 0;
  86.         int serverlogfd = 0;
  87.         lsg_t *cur_log = loglist.tail;
  88.         lsg_t *cur_serverlog= serlog_list.tail;
  89.         lsg_t *tem;
  90.  
  91.         //每次写文件前只读一次链表头长度,减少资源竞争
  92.         int glog_size = loglist.log_len;
  93.         int serverlog_size = serlog_list.log_len;
  94.        
  95.         if((rtmplogfd=open(RTMP_LOG_FILE,O_CREAT|O_WRONLY|O_APPEND,0600))>0)
  96.         {
  97.                 //>1 保证头和尾不重合,防止资源竞争
  98.                 while(cur_log && (loglist.log_len>1))
  99.                 {
  100.  
  101.  
  102.                         switch(cur_log->log_type)
  103.                         {
  104.                                 case OK:
  105.                                 case INIT_ERR:
  106.                                 case RTMP_DOWN:
  107.                                 case RTMP_UP:
  108.                                 case RTMP_CONNECT_ERR:
  109.                                 case RTMP_NO_CONNECT:
  110.                                         write(rtmplogfd,cur_log->log_msg,strlen(cur_log->log_msg));
  111.                                         break;
  112.                                 default:
  113.                                         break;
  114.                         }
  115.                         //dbg("%s 1\n",__FUNCTION__);
  116.                         if(cur_log->log_msg)
  117.                                 free(cur_log->log_msg);
  118.                        
  119.                         //dbg("%s 2\n",__FUNCTION__);
  120.                         if(cur_log)
  121.                                 free(cur_log);
  122.  
  123.                        
  124.                         //dbg("%s 3\n",__FUNCTION__);
  125.                         cur_log = cur_log->next;
  126.                         loglist.tail = cur_log;
  127.                         glog_size--;
  128.                 }
  129.                 if(rtmplogfd)
  130.                         close(rtmplogfd);
  131.  
  132.                
  133.         }
  134.         //平台日志直接写入
  135.         #if 0
  136.         if((serverlogfd=open(PLATFORM_LOG,O_CREAT|O_WRONLY|O_APPEND,0600))>0)
  137.         {
  138.                 //>1 保证头和尾不重合,防止资源竞争
  139.                 while(cur_serverlog && (serlog_list.log_len > 1))
  140.                 {
  141.                         switch(cur_serverlog->log_type)
  142.                         {
  143.                                 case URL_ERROR:
  144.                                 case NET_ERROR:
  145.                                 case SN_ID_ERROR:
  146.                                         write(serverlogfd,cur_serverlog->log_msg,strlen(cur_serverlog->log_msg));
  147.                                         break;
  148.                                 default:
  149.                                         break;
  150.                         }
  151.                         //dbg("%s 3\n",__FUNCTION__);
  152.                         if(cur_serverlog->log_msg)
  153.                                 free(cur_serverlog->log_msg);
  154.                         if(cur_serverlog)
  155.                                 free(cur_serverlog);
  156.                         //dbg("%s 4\n",__FUNCTION__);
  157.                         cur_serverlog = cur_serverlog->next;
  158.                         serlog_list.tail = cur_serverlog;
  159.                         serverlog_size--;
  160.                 }      
  161.                 if(serverlogfd)
  162.                         close(serverlogfd);
  163.         }
  164.         #endif
  165.         return 0;
  166.        
  167. }
  168.  
  169. /*
  170. data:      2015-12-8
  171. input: 
  172. output:
  173. return:                
  174. function:         平台日志
  175.  
  176. */
  177.  
  178. void Clog::platform_log(const char *msg)
  179. {
  180.         int fd,buf_size;
  181.         time_t t;
  182.         char *buf=(char *)malloc(MAX_CMD_SIZE);
  183.         char *tem=(char *)malloc(MAX_CMD_SIZE);
  184.         bzero(buf,MAX_CMD_SIZE);
  185.         bzero(tem,MAX_CMD_SIZE);
  186.         time(&t);
  187.        
  188.         //dbg("writing log 1:%s",buf);
  189.         sprintf(tem,"%s",ctime(&t));
  190.         del_char(tem,'\n');
  191.         del_char(tem,'\r');
  192.         sprintf(buf,"%.*s %s\n",strlen(tem),tem,msg);
  193.         //dbg("writing platfrom log 2:%s",buf);
  194.         buf_size = strlen(buf);
  195.         if((fd=open(PLATFORM_LOG,O_CREAT|O_WRONLY|O_APPEND,0600))>0)
  196.         {
  197.                 write(fd,buf,buf_size);
  198.                 close(fd);
  199.         }
  200.         if(buf)
  201.                 free(buf);
  202.         if(buf)
  203.                 free(tem);
  204. }
  205.  
  206.  

回复 "log"

这儿你可以回复上面这条便签

captcha