iOS发送探针日志到日志系统的简单实现
通过参考Testin的SDK实现方式,我们大致可以确定他们背后的实现方式:
首先,通过加载Testin的SDK,然后收集各种七七八八的数据,再通过socket发送数据到云端。
云端我们已经有了,就是http://log.qa.huayu.nd:8088
但是如何从iOS收集数据呢,我们需要自己写SDK,SDK的实现一般是采用framework来打包,但是这里简单为主,我将使用静态库来实现,我这里实现的是libHyLog01.a
要编写这样的库,你需要一台Mac,需要xcode开发环境
使用xcode新建一个静态库项目

新建一个类:
MyClass


然后,开始写探针日志发送代码:
- //
- // MyClass.m
- // HyLog01
- //
- // Created by 林 志宏 on 15-6-10.
- // Copyright 2015年 网龙公司. All rights reserved.
- //
- #import "MyClass.h"
- #import <arpa/inet.h>
- #import <errno.h>
- #import <netdb.h>
- #import <netinet/in.h>
- #import <stdbool.h>
- #import <stdio.h>
- #import <stdlib.h>
- #import <string.h>
- #import <sys/socket.h>
- #import <sys/types.h>
- #import <unistd.h>
- static const in_port_t kPortNumber = 11215;
- @implementation MyClass
- -(void) getConn
- {
- const char* hostname = "log.qa.huayu.nd";
- struct sockaddr_storage* server_addr_ptr;
- struct sockaddr_in* sock_addr_ptr;
- struct sockaddr_storage server_addr;
- struct hostent *host = NULL;
- host = gethostbyname2(hostname, AF_INET);
- server_addr_ptr = &server_addr;
- server_addr.ss_family = host->h_addrtype;
- sock_addr_ptr = (struct sockaddr_in*)server_addr_ptr;
- sock_addr_ptr->sin_len = sizeof(*sock_addr_ptr);
- sock_addr_ptr->sin_port = htons(kPortNumber);
- sock_addr_ptr->sin_addr = *(struct in_addr*)host->h_addr_list[0];
- memset(&sock_addr_ptr->sin_zero, 0, sizeof(sock_addr_ptr->sin_zero));
- int sockfd;
- sockfd = socket(server_addr.ss_family, SOCK_STREAM, 0);
- int err = connect(sockfd, (struct sockaddr *)&server_addr, server_addr.ss_len);
- const char *bytes = "9996:hello, ios\n";
- char buffer[30];
- int i;
- for (i = 0; i < 15; i++) {
- buffer[i] = bytes[i];
- }
- buffer[i] = '\0';
- write(sockfd, buffer, 15);
- close(sockfd);
- NSLog(@"conn: %d %d", err, (int)sizeof(buffer));
- // memset(&sock_addr_ptr-
- NSLog(@"hello");
- NSLog(@"send log to huayu");
- }
- @end
然后,开始编译

接下来,就是在我们的实际项目中进行引用了
我创建了一个View_Switcher项目来引用我刚刚开发的库

运行:

然后,我们可以看到我们的日志系统服务端收到了数据了:
http://log.qa.huayu.nd:8088/

参考文献:
http://blog.sina.com.cn/s/blog_7b9d64af0101jlym.html
iOS发送探针日志到日志系统的简单实现的更多相关文章
- iOS各框架功能简述以及系统层次结构简单分析
iOS各个框架所对应的功能简单介绍 iOS系统结构层次:
- Es+kafka搭建日志存储查询系统(设计)
现在使用的比较常用的日志分析系统有Splunk和Elk,Splunk功能齐全,处理能力强,但是是商用项目,而且收费高.Elk则是Splunk项目的一个开源实现,Elk是ElasticSearch(Es ...
- iOS 中捕获程序崩溃日志
iOS 中捕获程序崩溃日志 (2014-04-22 17:35:59) 转载▼ iOS开发中遇到程序崩溃是很正常的事情,如何在程序崩溃时捕获到异常信息并通知开发者,是大多数软件都选择的方法.下 ...
- 海量日志实时收集系统架构设计与go语言实现
日志收集系统应该说是到达一定规模的公司的标配了,一个能满足业务需求.运维成本低.稳定的日志收集系统对于运维的同学和日志使用方的同学都是非常nice的.然而这时理想中的日志收集系统,现实往往不是这样的. ...
- 企业日志大数据分析系统ELK+KAFKA实现【转】
背景: 最近线上上了ELK,但是只用了一台Redis在中间作为消息队列,以减轻前端es集群的压力,Redis的集群解决方案暂时没有接触过,并且Redis作为消息队列并不是它的强项:所以最近将Redis ...
- 用ELK搭建简单的日志收集分析系统【转】
缘起 在微服务开发过程中,一般都会利用多台服务器做分布式部署,如何能够把分散在各个服务器中的日志归集起来做分析处理,是一个微服务服务需要考虑的一个因素. 搭建一个日志系统 搭建一个日志系统需要考虑一下 ...
- Linux下日志文件监控系统Logwatch的使用记录
Linux下日志文件监控系统Logwatch的使用记录 原文:http://www.cnblogs.com/kevingrace/p/6519504.html 在维护Linux服务器时,经常需要查看系 ...
- centos7安装Logwatch配合msmtp邮件客户端发送服务器监控分析日志
########################### #DATE 2016-07-29 # #Authur by Denilas Yeung ...
- Kubernetes-20:日志聚合分析系统—Loki的搭建与使用
日志聚合分析系统--Loki 什么是Loki? Loki 是 Grafana Labs 团队最新的开源项目,是一个水平可扩展,高可用性,多租户的日志聚合系统.它的设计非常经济高效且易于操作,因为它不会 ...
- Cisco配置发送日志到日志服务器
Cisco配置发送日志到日志服务器logging 172.16.6.22logging onlogging trap 7 //指定日志消息的级别 (0:紧急(Emergencies) 1:告警(Al ...
随机推荐
- 【Java】连接MySQL问题总结
前言 最近在学习Java的数据库相关操作,在看视频时自己找资源而产生的一些问题,在此做个总结. 正文 在刚开始学习的时候,你可能跟着老师这样写代码,虽然某些地方已经冒出了红色的波浪线,但你半信半疑的继 ...
- 深入理解 python 虚拟机:魔术方法之数学计算
深入理解 python 虚拟机:魔术方法之数学计算 在本篇文章当中主要给大家介绍在 python 当中一些常见的魔术方法,本篇文章主要是关于与数学计算相关的一些魔术方法,在很多科学计算的包当中都使用到 ...
- UCOS II源码分析二
最近大家都沉浸在找到实习的快乐中,自我充电的时间相对减少了,今天重拾一下ucosii的学习,记录如下: 上一篇文章分析了ucosii源码文件组织结构以及简单介绍了各个文件夹里对应文件的功能,要是对uc ...
- 【C#/.NET】record介绍
目录 什么是record? 使用record record解构 record原理 结论 什么是record? record是.NET 5中的一种新特性,可以看作是一种概念上不可变的类.recor ...
- 【Python爬虫】批量爬取网页的图片&制作数据集
由于Python拥有强大且丰富的类库,语法简单,效率高而被广泛运用于网络爬虫,很多人都是通过爬虫认识Python. 因为小编最近正在做目标识别相关的项目,所以需要大量的 ...
- WFP必须掌握的技能之自定义控件——实战:自制上传文件显示进度按钮
自定义控件在WPF开发中是很常见的,有时候某些控件需要契合业务或者美化统一样式,这时候就需要对控件做出一些改造. 目录 按钮设置圆角 按钮上传文件相关定义 测试代码 话不多说直接看效果 默认效果: 上 ...
- 给你的 Discord 接入一个既能联网又能画画的 ChatGPT
如果有这样一款 Discord 机器人,它既能访问互联网,又能绘画,还能给 YouTube 视频提供摘要.最重要的是,它是完全免费的,不需要提供 OpenAI 的 API Key,我就问你香不香? 现 ...
- 【.NET 深呼吸】全代码编写WPF程序
学习 Code 总有这样一个过程:入门时候比较依赖设计器.标记语言等辅助工具:等到玩熟练了就会发现纯代码写 UI 其实更高效.而且,纯代码编写也是最灵活的.Windows Forms 项目是肯定可以全 ...
- 面试官:“同学,你做的这几个项目都不错。但怎么问QPS你就胡说呢?”
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 这位同学,你比上一位面试者好多了,你的简历中做的几个项目都不错.既有业务项目,也有技术项目,看 ...
- 7. 特殊SQL的执行
1. 模糊查询 演示代码: /** * 测试模糊查询 * @param mohu * @return */ List<User> testMohu(@Param("mohu& ...