zoukankan      html  css  js  c++  java
  • iOS发送探针日志到日志系统的简单实现

    通过参考Testin的SDK实现方式,我们大致可以确定他们背后的实现方式:

    首先,通过加载Testin的SDK,然后收集各种七七八八的数据,再通过socket发送数据到云端。

    云端我们已经有了,就是http://log.qa.huayu.nd:8088

    但是如何从iOS收集数据呢,我们需要自己写SDK,SDK的实现一般是采用framework来打包,但是这里简单为主,我将使用静态库来实现,我这里实现的是libHyLog01.a

    要编写这样的库,你需要一台Mac,需要xcode开发环境

    使用xcode新建一个静态库项目

    新建一个类:

    MyClass

    然后,开始写探针日志发送代码:

    1. //
    2. // MyClass.m
    3. // HyLog01
    4. //
    5. // Created by 林 志宏 on 15-6-10.
    6. // Copyright 2015年 网龙公司. All rights reserved.
    7. //
    8.  
    9. #import "MyClass.h"
    10. #import <arpa/inet.h>
    11. #import <errno.h>
    12. #import <netdb.h>
    13. #import <netinet/in.h>
    14. #import <stdbool.h>
    15. #import <stdio.h>
    16. #import <stdlib.h>
    17. #import <string.h>
    18. #import <sys/socket.h>
    19. #import <sys/types.h>
    20. #import <unistd.h>
    21.  
    22. static const in_port_t kPortNumber = 11215;
    23.  
    24. @implementation MyClass
    25. -(void) getConn
    26. {
    27.     const char* hostname = "log.qa.huayu.nd";
    28.  
    29.     struct sockaddr_storage* server_addr_ptr;
    30.     struct sockaddr_in* sock_addr_ptr;
    31.     struct sockaddr_storage server_addr;
    32.     struct hostent *host = NULL;
    33.  
    34.     host = gethostbyname2(hostname, AF_INET);
    35.  
    36.     server_addr_ptr = &server_addr;
    37.  
    38.     server_addr.ss_family = host->h_addrtype;
    39.     sock_addr_ptr = (struct sockaddr_in*)server_addr_ptr;
    40.     sock_addr_ptr->sin_len = sizeof(*sock_addr_ptr);
    41.     sock_addr_ptr->sin_port = htons(kPortNumber);
    42.     sock_addr_ptr->sin_addr = *(struct in_addr*)host->h_addr_list[0];
    43.     memset(&sock_addr_ptr->sin_zero, 0, sizeof(sock_addr_ptr->sin_zero));
    44.     int sockfd;
    45.     sockfd = socket(server_addr.ss_family, SOCK_STREAM, 0);
    46.     int err = connect(sockfd, (struct sockaddr *)&server_addr, server_addr.ss_len);
    47.     const char *bytes = "9996:hello, ios ";
    48.     char buffer[30];
    49.     int i;
    50.     for (i = 0; i < 15; i++) {
    51.         buffer[i] = bytes[i];
    52.     }
    53.     buffer[i] = '';
    54.     write(sockfd, buffer, 15);
    55.     close(sockfd);
    56.     NSLog(@"conn: %d %d", err, (int)sizeof(buffer));
    57.     // memset(&sock_addr_ptr-
    58.     NSLog(@"hello");
    59.     NSLog(@"send log to huayu");
    60. }
    61. @end

    然后,开始编译

    接下来,就是在我们的实际项目中进行引用了

    我创建了一个View_Switcher项目来引用我刚刚开发的库

    运行:

    然后,我们可以看到我们的日志系统服务端收到了数据了:

    http://log.qa.huayu.nd:8088/

    参考文献:

    http://blog.sina.com.cn/s/blog_7b9d64af0101jlym.html

  • 相关阅读:
    笔试面试过程中常考的简单题目
    MySQL字符串函数:字符串截取总结
    克隆到新的datatale中
    C#后台调用js代码和其他页面(弹窗)
    asp.net中如何使一个button先执行后台的Click再执行javascript的onclick?
    table按某列进行分组
    table里有两个input,选中只选中一个
    ts和js的区别
    es6-es7-es10
    ECMAScript 6(简称:ES6) 和 JavaScript 到底是什么关系?
  • 原文地址:https://www.cnblogs.com/cleardo/p/4567007.html
Copyright © 2011-2022 走看看