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

news/2024/5/19 5:29:39

前言

做为一名移动端开发者,深刻体会日志采集对工程师来说具有重要意义,遇到问题除了 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.mrgr.cn/p/32741253

相关文章

DRF之jwt介绍与使用

一、jwt介绍 1、什么是jwt JWT(JSON Web Token)是一种用于在网络应用中传递信息的开放标准(RFC 7519)。它通过在用户和服务器之间传递的信息生成具有一定结构的令牌,这些令牌可以袐用于身份验证和信息传递。它是一种前后端登陆认证的方案,区别于之前的 cookie,session。…

Milvus 在哈啰的应用与落地

向量数据库还有哪些可能性? 本期的【User Tech】直播告诉你答案!明晚的直播,我们邀请了来自哈啰的资深研发工程师王永辉,他将为我们详细讲解 Milvus 在本地出行及生活服务平台的应用及未来发展的诸多可能性,敬请期待&a…

Table表格(关于个人介绍与图片)

展开行&#xff1a; <el-table :data"gainData" :border"gainParentBorder" style"width: 100%"><el-table-column type"expand"><template #default"props"><div m"4"><h3>工作经…

第100+6步 ChatGPT文献复现:ARIMAX预测新冠

基于WIN10的64位系统演示 一、写在前面 我们继续来解读ARIMAX模型文章&#xff0c;这一轮带来的是&#xff1a; 《PLoS One》杂志的2022年一篇题目为《A data-driven eXtreme gradient boosting machine learning model to predict COVID-19 transmission with meteorologic…

NUS EE4408 机器学习 期末一页纸笔记

听老师说每年有几百个上这门课的人 期末考试允许携带一页纸的笔记(虽然最后派不上太大用场 但还是放在这里提供给有需要的同学)

php变量引用

可以看到b原本的值是123,引用a之后,变成100 但是修改b的值为1100之后,发现a的值也从原本的100变成1100了 这就涉及到引用的基本工作原理:当你使用引用时,实际上是在操作同一个变量的不同别名,因此对一个引用的修改会影响到所有指向该变量的引用 应用场景: 如果某个我们…

【Linux】Kill Process 后依然占用显卡空间并显示 No Such Process

问题 &#xff1a; 如图所示&#xff0c;在显卡上使用 Crtl C 结束某个进程后&#xff0c;使用 nvitop 工具或者 nvidia-smi 命令&#xff0c;显示 No Such Process&#xff0c;但是确占用着显卡空间。搜索这个 PID 时&#xff0c;也显示找不到。 解决&#xff1a;实际上是因为…

开启、关闭HDD读、写缓存状态

sg3 一、sg3查看缓存状态 您可以使用sg_modes命令来查看SAS盘和SATA盘的缓存状态。例如,要查看/dev/sdb设备的缓存状态,您可以执行以下命令:sg_modes -p 8,0 /dev/sdb二、sg3关闭机械盘写缓存状态(仅适用于SAS盘) 对于SAS盘,您可以按照以下步骤更改其读写缓存状态: 1、编…

通过STS来对AWS资源进行更灵活的权限控制

一、前言 背景:一个S3 bucket,存储用户的文件,每个用户只允许上传、下载自己目录下的文件。 如何让Policy更灵活、更动态,可以让获取到的权限凭证可以匹配到单个终端用户的S3文件目录下。 本节主要介绍,以编程方式调用 AWS Security Token Service (AWS STS) 的API,获取访…

【WSL报错】执行:wsl --list --online;错误:0x80072ee7

【WSL报错】执行:wsl --list --online&#xff1b;错误:0x80072ee7 问题情况解决方法详细过程 问题情况 C:\Users\17569>wsl --list --online 错误: 0x80072ee7 解决方法 开系统代理&#xff0c;到外网即可修复&#xff01;&#xff01;&#xff01;&#xff01;&#x…

生产服务器变卡怎么排查

服务器变卡怎么排查&#xff0c;可以从以下四个方面去考虑 生产服务器变卡怎么排查 1、网络2、cpu的利用率3、io效率4、内存瓶颈 1、网络 可以使用netstat、iftop等工具查看网络流量和网络连接情况&#xff0c;检查是否网络堵塞、丢包等问题 2、cpu的利用率 1、用top命令定…

CISCN2023初赛-web复现

Unzip 简单的软链接,都玩烂了。 先创个软链接连接到/var/www/html,然后再创个同名文件夹,在这个文件夹下写马,传上去后等效在/var/www/html上写马,直接连接读flag就行了。deserbugjava审计。很显然的反序列化,bugstr传参。 lib中出了hutool还有CC3.2.2,但C…

ORAN C平面 Section Extension 23

ORAN C平面Section扩展23用于任意symbol模式的调制压缩参数。此section扩展允许为一个或多个“SymPrbPatterns”指定多组“mcScaleReMask、csf和mcScaleOffset”值。“SymPrbPattern”用于指定一组PRB&#xff0c;这些PRB可以跨越使用prbPattern指定的整个PRB范围&#xff08;频…

实时动态规则(55)规则发布平台后端开发(5) 规则模型开发(4)rulemodel_03_涉及事件时间

0 涉及架构 注意 :以下代码,都是根据一个特定规则模型: rulemodel_03_caculator 来进行开发的 不同的规则模型,如下功能代码需要进行不同的开发 RuleModel_03 这个规则模型的特点是:拥有事件间隔时间1 规则参数结构规范{"ruleModelId": "3","…

RakSmart站群服务器租用注意事项科普

随着互联网的飞速发展&#xff0c;站群运营成为越来越多企业和个人的选择。而RakSmart作为知名的服务器提供商&#xff0c;其站群服务器租用服务备受关注。在租用RakSmart站群服务器时&#xff0c;源库建议有一些关键的注意事项需要特别留意&#xff0c;以确保服务器的稳定运行…

react 项目路由配置(react-router-dom 版本 v6.3、v6.4)

根据 react-router-dom 的版本&#xff0c;有不同的方式 一、react-router-dom v6.3 用到的主要 api: BrowserRouteruseRoutesOutlet 下面是详细步骤&#xff1a; 1、index.js BrowserRouter 用来实现 单页的客户端路由使用 BrowserRouter 包裹 App放在 顶级 位置&#x…

阿里二面凉了,难蹦。。。

分享一位同学阿里巴巴的后端面经&#xff0c;共有 2 面&#xff0c;第一面很顺利过了&#xff0c;可惜挂在第二面。 这两面的知识点范围&#xff0c;我帮大家罗列一下&#xff1a; 网络&#xff1a;TCP、HTTP mysql&#xff1a;索引应用、索引结构、隔离级别、最左匹配 redis…

根据bounding box坐标框绘制mask

根据bounding box坐标框绘制mask import os from PIL import Image, ImageDraw# 定义图像和标注文件夹路径 image_folder_path = rF:\Liang\Datasets\Text_dataset\Tampered-IC13\train_img annotation_folder_path = rF:\Liang\Datasets\Text_dataset\Tampered-IC13\train_gt#…

e 语言 只取数字/汉字/字母/符号

dmeo本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/18156144

关于加强电力系统通信与电网调度自动化建设问题的规定

关于加强电力系统通信与电网调度自动化建设问题的规定 为了保障电力系统安全、经济、优质、可靠运行&#xff0c;必须加强电网调度管理和提高技术装备水平。根据当前电网技术装备状况&#xff0c;结合电力系统通信和电网调度自动化的特点&#xff0c;以及今后规划发展的要求&am…