移动端日志采集与分析最佳实践

前言

做为一名移动端开发者,深刻体会日志采集对工程师来说具有重要意义,遇到问题除了 debug 调试就是看日志了,通过看日志可以帮助我们了解应用程序运行状况、优化用户体验、保障数据安全依据,本文将介绍日志采集的重要性、移动端日志的采集方式,最后介绍下如何通过观测云对移动端日志进行深度洞察和分析。

一 、日志采集的重要性

1、故障排查和问题定位

移动端日志是开发者在应用程序出现问题时的重要线索。通过日志,开发者可以了解到应用程序在运行过程中发生的错误、异常、崩溃等情况,帮助他们快速定位并解决问题,提高应用程序的稳定性和可靠性。

2、能优化和资源管理

移动端日志记录了应用程序的性能数据,如启动时间、响应时间、内存占用等。通过分析这些性能日志,开发者可以发现应用程序的性能瓶颈,优化代码逻辑、资源管理和网络请求,提升应用程序的运行效率和用户体验。

3、用户行为分析和产品改进

移动端日志记录了用户在应用程序中的操作行为、浏览趋势和交互轨迹。通过分析这些用户行为日志,开发者可以了解用户的偏好和行为习惯,为优化用户体验、改进产品功能提供重要参考。

4、版本迭代和功能优化

移动端日志不仅可以记录用户行为和性能数据,还可以包括用户反馈、应用程序崩溃、特定功能的使用情况等信息。通过分析这些日志信息,开发者可以了解用户对应用程序的需求和不满意之处,及时调整产品策略,优化应用程序的功能设计和用户界面。

5、安全监控和数据保护

移动端日志记录了应用程序的安全事件、网络请求和用户身份验证等信息。通过实时监控移动端日志,开发者可以及时发现和应对安全漏洞、恶意攻击和数据泄露等风险,保护用户数据的安全和隐私。

二 、移动端日志的采集方式

选择合适的日志采集方案,并确保日志的有效记录、安全存储和合规使用。

1、使用内置日志系统

移动操作系统通常提供了内置的日志系统,如 Android 中的 Logcat 和 iOS 中的 NSLog 。开发者可以通过这些内置的日志系统记录应用程序的运行日志。例如,在 Android 中,可以使用 Log 类的静态方法来输出日志信息,而在 iOS 中,可以使用 NSLog 函数。这个是最常见的,但是需要 debug 调试。

2、第三方日志框架

开发者可以使用第三方的日志框架来记录移动端日志,这些框架通常提供了更丰富的功能和更灵活的配置选项,如日志级别控制、日志格式化、日志存储等。常见的移动端日志框架包括 CocoaLumberjack、Log4j、Logback 等。

3、自定义日志系统

在一些特定的情况下,开发者可能需要根据自己的需求自定义日志系统。这种情况下,开发者可以编写自己的日志记录模块,实现日志的采集、存储和管理等功能。

4、使用日志收集工具

一些日志收集工具可以帮助开发者在移动应用程序中集中管理和分析日志信息,如观测云、Bugsnag、Sentry、Firebase Crashlytics 等。这些工具通常提供了 SDK 或者 API ,开发者可以集成到自己的应用程序中,以便实现日志的自动采集和上传。

三、通过观测云对移动端日志进行深度洞察和分析

前提条件,已经有观测云控制台账号,可以登录观测云控制台。

1、在观测云控制台创建应用(本文章示例为 iOS)

2、集成(CocoaPods 方式)

  • 配置 Podfile 文件
target 'yourProjectName' do# Pods for your projectpod 'FTMobileSDK', '1.4.11'end
  • 在 Podfile 目录下执行以下命令安装 SDK
pod install
  • 添加头文件
import "FTMobileAgent.h"
  • SDK 初始化
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{// SDK FTMobileConfig 设置FTMobileConfig *config = [[FTMobileConfig alloc]initWithMetricsUrl:@"Your App metricsUrl"];config.enableSDKDebugLog = YES;config.env = FTEnvProd;config.service @"df_rum_ios";// 启动 SDK[FTMobileAgent startWithConfigOptions:config];return YES;shifan

示范例子

  • 开启日志配置
//开启 loggerFTLoggerConfig *loggerConfig = [[FTLoggerConfig alloc]init];loggerConfig.enableCustomLog = YES;loggerConfig.enableLinkRumData = YES;//开启日志loggerConfig.logLevelFilter = @[@(FTStatusError),@(FTStatusCritical)];loggerConfig.discardType = FTDiscardOldest;[[FTMobileAgent sharedInstance] startLoggerWithConfigOptions:loggerConfig];

3、日志采集

移动端的日志采集有两种,第一种是开发者根据自己的实际情况,主动上传到平台,用以数据分析,第二种是崩溃日志,被动上传,观测云自动采集,本文逐一介绍。

1)自定义上传日志

通过观测云提供的方法,可以自定义上传日志内容,同时可以配置日志等级,日志内容可以为多种模式(json、字符串)等。

typedef NS_ENUM(NSInteger, FTStatus) {FTStatusInfo         = 0,FTStatusWarning,FTStatusError,FTStatusCritical,FTStatusOk,
};
/*** 日志上报* @param content  日志内容,可为json字符串* @param status   事件等级和状态,info:提示,warning:警告,error:错误,critical:严重,ok:恢复,默认:info*/
-(void)logging:(NSString *)content status:(FTStatus)status;
  • 代码展示

上传日志等级为:FTStatusInfo

上传日志内容为以下内容:

2024-04-11 11:10:17.921 [http-nio-9201-exec-9] Info  c.r.s.c.SysRoleController - [list,48] - ry-system-dd 2350624413051873476 1032190468283316 - 查询角色列表开始
[[FTMobileAgent sharedInstance] logging:@"2024-04-11 11:10:17.921 [http-nio-9201-exec-9] Info  c.r.s.c.SysRoleController - [list,48] - ry-system-dd 2350624413051873476 1032190468283316 - 查询角色列表开始" status:FTStatusInfo];
  • 日志切割

移动端打上来的日志数据不能看的,因为都是 value 类的,所有在观测云中可以进行提取,如 grok 语句如下:

grok(_, "%{TIMESTAMP_ISO8601:time} %{NOTSPACE:thread_name} %{NOTSPACE:status}%{SPACE}%{NOTSPACE:class_name} - \\[%{NOTSPACE:method_name},%{NUMBER:line}\\] - %{DATA:service} %{DATA:trace_id} %{DATA:span_id} - %{GREEDYDATA:msg}")
default_time(time, "Asia/Shanghai")

切割后,结果如下,切成 key-value 标准化字段,便于精准分析。

2)采集崩溃日志

  • 采集步骤

为了搜集 crash 日志,我这里估计做了一个数组越界的崩溃,在代码 64 行。

  • 效果展示

在观测云控制台「RUM 查看器」 > 「Error」,看到了这个错误,如下图。

总结

总的来说,移动端日志对于应用程序的开发、测试、部署和运营都具有重要意义,是开发者和运营团队了解应用程序运行状况、优化用户体验、保障数据安全的重要工具和依据。不论采用哪种方法,开发者都应该根据应用程序的需求和特点,选择合适的日志采集方案,并确保日志的有效记录、安全存储和合规使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/4209.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高级防爬还得是公众号

平时一天也就1K的流量,最近流量暴涨,已经用自研的WAF防火墙阻挡了很多恶意攻击和爬虫,已经过滤掉很多低级攻击和爬取了。 多出的流量,也仅仅多了一个导航 dh.yu7s.com 用户,多时没有用的机器人爬虫,不封掉浪…

EXCEL表格中的数字,为什么每次打开会自动变成日期?

一、典型现象 在工作中,有时会发现公司里的报表,经过多人多次的重复的使用和修改后,会出现这种情况: 1.在表格里按照需要输入数字,保存工作簿。 2.然而,再次打开工作簿,里面的数字变成日期&a…

c#学习入门2

十、运算符 1)算术运算符是用于数值类型变量计算的运算符,它返回的结果是数值 1.赋值符号 2.算数运算符 加 减- 乘* 除/ 取余% 3.算数运算符的优先级 4.算术运算符的复合运算 5.算术运算符的自增减 2)字符串拼接 1.字符串拼接方式1 注意&…

自定义View-旋转变色圆角三角形的绘制

本文字数:3151字 预计阅读时间:20分钟 在现代设计中,动效图在APP的UI界面中所起到的作用无疑是显著的。相比于静态的界面,动效更符合人类的自然认知体系,它有效地降低了用户的认知负载,UI动效俨然已经成为了…

错误代码126:加载d3dcompiler_43.dll失败,分享多种解决方法

在正常使用电脑的过程中,当我尝试启动并运行一款心仪的游戏时,系统却突然弹出一个令人困扰的错误提示“错误代码126:加载d3dcompiler_43.dll失败”,它会导致游戏无法正常运行。为了解决这个问题,我经过多次尝试和总结,…

Docker容器配置进阶

一、容器的自动重启 Docker提供重启策略选项控制容器退出时或Docker重启时是否自动启动该容器。重启策略能够确保关联的多个容器按照正确的顺序启动。Docker建议使用重启策略,并避免使用进程管理器启动容器。运行容器时可以使用--restart选项指定重启策略。容器的重…

VMware ESXi虚拟机备份的方法和步骤

关于虚拟机备份 VMware ESXi 是 VMware vSphere 企业虚拟化套件的核心组件。在版本4.1之前,它一直被称为ESX。ESXi是一种裸机管理程序,直接安装在物理服务器上,它提供对底层资源的直接访问和控制,允许您在单个物理主机上创建和运…

网鼎杯-2018-unfinish解题方法

BUUCTF在线评测这里可以解题无需搭建 进入这题后我们会得到这样一个界面 这里我们会发现登录不进去也没有注册界面以及源码,这里我们需要获取它其他的一些界面找注入机会,这里有两种方式找其他界面,一种是猜这里是登录界面那么必定就会有注册…

网络安全新挑战:通用人工智能(AGI)等级保护指南

通用人工智能(AGI)的发展现状及趋势 随着2023年大语言模型应用的划时代突破,以ChatGPT为杰出代表的此类技术犹如一股洪流,彻底颠覆了人类与机器智能交互的疆界,引领通用人工智能(AGI)步入一个崭…

Flume 搭建和操作使用的详细教程

下载 官网下载: https://flume.apache.org/download.html 安装 基本上不需要做什么配置,下载后解压即可使用!! 下载安装包:apache-flume-1.11.0-bin .tar.gz 上传至 linux 的 /opt/ 目录下 解压至 /opt/apps(可以自定义目录) 修改简短名称(方便配置) 配置环境变量(方…

国家开放大学2024年春《国家赔偿法-山东》形成性考核一二三四终结性考试参考答案

答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 答案:更多答案,请关注【电大搜题】微信公众号 【单选题】张某重伤他人被刑事拘留。一个月后,公…

Vue typescript 获得html 元素

方法一 getElementById or something else <div class"book-navbar-menutree" id"menuTree" name"menuTree"> onMounted(() > { var menu document.getElementById(menuTree) as HTMLElementmenu.innerHTML menuTreeStr.value }) …

[SWPUCTF-2022-新生赛]ez_sql

title:[SWPUCTF 2022 新生赛]ez_sql 审题 根据提示&#xff0c;POST传参 得到假的flag 判断类型 字符型注入 判断列数 发现空格和’or’被过滤 重新构造 nss-1/**/oorrder/**/by/**/4#发现为3个字段 采用联合注入union 爆库 发现union被过滤&#xff0c;双写union绕过 发…

【小迪安全2023】第58天:服务攻防-应用协议设备KibanaZabbix远控向日葵VNCTV

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java、PHP】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收…

腾讯云邮件推送如何设置?群发邮件的技巧?

腾讯云邮件推送功能有哪些&#xff1f;怎么有效使用邮件推送&#xff1f; 腾讯云邮件推送以其稳定、高效的特点&#xff0c;受到了众多企业的青睐。那么&#xff0c;腾讯云邮件推送如何设置呢&#xff1f;又有哪些群发邮件的技巧呢&#xff1f;下面AokSend就来详细探讨一下。 …

C++ ─── 匿名对象+变量的创建顺序

目录 1. 匿名对象&#xff08;临时对象&#xff09; 2. 编译器的优化 3.变量的创建与销毁 1. 匿名对象&#xff08;临时对象&#xff09; 我们先来看有名对象的创建 Date d1; Date d2(2024,4,27);匿名对象的创建 Date(2024,56,1); 生成了一个匿名对象&#xff0c;执行完Da…

photoshop如何使用PS中的吸管工具吸取软件外部的颜色?

第一步&#xff0c;打开PS&#xff0c;随意新建一个画布&#xff0c;或打开一个图片。 第二步&#xff0c;将PS窗口缩小&#xff0c;和外部窗口叠加放置&#xff0c;以露出后面的其它页面。 第三步&#xff0c;选中吸管工具&#xff0c;在PS窗口内单击一点吸取颜色&#xff0c;…

江开2024年春《心理健康 060211》过程性考核作业二参考答案

答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 单选题 1提出理性情绪疗法的心理学家是&#xff08; &a…

1、Flink DataStreamAPI 概述(上)

一、DataStream API 1、概述 1&#xff09;Flink程序剖析 1.Flink程序组成 a&#xff09;Flink程序基本组成 获取一个执行环境&#xff08;execution environment&#xff09;&#xff1b;加载/创建初始数据&#xff1b;指定数据相关的转换&#xff1b;指定计算结果的存储…

SpringBoot 缓存

个人简介&#xff1a;Java领域新星创作者&#xff1b;阿里云技术博主、星级博主、专家博主&#xff1b;正在Java学习的路上摸爬滚打&#xff0c;记录学习的过程~ 个人主页&#xff1a;.29.的博客 学习社区&#xff1a;进去逛一逛~ 目录 一、缓存的作用二、SpringBoot启用缓存三…