通过参考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\n";
  48.     char buffer[30];
  49.     int i;
  50.     for (i = 0; i < 15; i++) {
  51.         buffer[i] = bytes[i];
  52.     }
  53.     buffer[i] = '\0';
  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

iOS发送探针日志到日志系统的简单实现的更多相关文章

  1. iOS各框架功能简述以及系统层次结构简单分析

    iOS各个框架所对应的功能简单介绍 iOS系统结构层次:

  2. Es+kafka搭建日志存储查询系统(设计)

    现在使用的比较常用的日志分析系统有Splunk和Elk,Splunk功能齐全,处理能力强,但是是商用项目,而且收费高.Elk则是Splunk项目的一个开源实现,Elk是ElasticSearch(Es ...

  3. iOS 中捕获程序崩溃日志

    iOS 中捕获程序崩溃日志 (2014-04-22 17:35:59) 转载▼     iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法.下 ...

  4. 海量日志实时收集系统架构设计与go语言实现

    日志收集系统应该说是到达一定规模的公司的标配了,一个能满足业务需求.运维成本低.稳定的日志收集系统对于运维的同学和日志使用方的同学都是非常nice的.然而这时理想中的日志收集系统,现实往往不是这样的. ...

  5. 企业日志大数据分析系统ELK+KAFKA实现【转】

    背景: 最近线上上了ELK,但是只用了一台Redis在中间作为消息队列,以减轻前端es集群的压力,Redis的集群解决方案暂时没有接触过,并且Redis作为消息队列并不是它的强项:所以最近将Redis ...

  6. 用ELK搭建简单的日志收集分析系统【转】

    缘起 在微服务开发过程中,一般都会利用多台服务器做分布式部署,如何能够把分散在各个服务器中的日志归集起来做分析处理,是一个微服务服务需要考虑的一个因素. 搭建一个日志系统 搭建一个日志系统需要考虑一下 ...

  7. Linux下日志文件监控系统Logwatch的使用记录

    Linux下日志文件监控系统Logwatch的使用记录 原文:http://www.cnblogs.com/kevingrace/p/6519504.html 在维护Linux服务器时,经常需要查看系 ...

  8. centos7安装Logwatch配合msmtp邮件客户端发送服务器监控分析日志

    ########################### #DATE 2016-07-29                         # #Authur by Denilas Yeung     ...

  9. Kubernetes-20:日志聚合分析系统—Loki的搭建与使用

    日志聚合分析系统--Loki 什么是Loki? Loki 是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统.它的设计非常经济高效且易于操作,因为它不会 ...

  10. Cisco配置发送日志到日志服务器

    Cisco配置发送日志到日志服务器logging 172.16.6.22logging onlogging trap 7  //指定日志消息的级别 (0:紧急(Emergencies) 1:告警(Al ...

随机推荐

  1. 渗透测试-struts2攻防环境搭建拿shell

    一.下载Jspstudy 打开目录D:\JspStudy\tomcat\webapps 二.打开struts2并进行拿shell 1.打开struts2 在浏览器中输入网址http://localho ...

  2. Abstract Factory Pattern 抽象工厂模式简介与 C# 示例【创建型】【设计模式来了】

    〇.简介 1.什么是抽象工厂模式? 一句话解释:   通过对抽象类和抽象工厂的一组实现,独立出一系列新的操作,客户端无需了解其逻辑直接访问. 抽象工厂模式(Abstract Factory Patte ...

  3. 2023最新IntellJ IDEA诺依SpringCloud开发部署文档(保姆级别)

    目录 若依RuoYi v3.6.2部署文档 一.环境构建 二.模块描述 三.部署后端 1.下载到本地. 2.MySQL导入数据. 3.Nacos修改 (1)保证本地Nacos下载安装成功,修改本地Na ...

  4. delving into deep imbalanced regression翻译

    非对照翻译,有所简略.翻译不对,尽情谅解,可留言 作者解释 and paper 笔记 Abstract   Real-world data often exhibit imbalanced distr ...

  5. windows服务启动时提示找不到指定路径的问题

    我是自己写了一个windows服务,并且在之前一直运行良好,上周四晚上之后,竟然莫名其妙的停止了,我登上远程服务器,才发现,该服务已经停止,当我手动打开该服务时,提示我如下错误,找不到指定路径:. 一 ...

  6. C++ 核心指南之资源管理(上)

    C++ 核心指南(C++ Core Guidelines)是由 Bjarne Stroustrup.Herb Sutter 等顶尖 C++ 专家创建的一份 C++ 指南.规则及最佳实践.旨在帮助大家正 ...

  7. Java猜数字,猜完一局以后,输入y继续下一次游戏,否则结束

    代码如下: public static void main(String[] args) { String x = ""; do { int random = (int) (Mat ...

  8. ASP.NET Core 6框架揭秘实例演示[42]:检查应用的健康状况

    现代化的应用及服务的部署场景主要体现在集群化.微服务和容器化,这一切都建立在针对部署应用或者服务的健康检查上.ASP.NET提供的健康检查不仅可能确定目标应用或者服务的可用性,还具有健康报告发布功能. ...

  9. 树莓派4B-细分驱动步进电机

    树莓派4B-细分驱动步进电机 项目介绍 利用4B树莓派控制步进电机转动,精度可达:0.0144度 (即360度/25000) 适用于非常精密的角度转动. 舵机的精度为1度,无法实现超高精度控制. 硬件 ...

  10. Flutter upgrade 卡死问题

    使用 到本地的flutter sdk的目录下 $flutter upgrade --force 降低到指定版本 : $flutter version 1.22.4