将 iOS 应用程序日志发送到 Sematext 的 SDK
Sematext Logs 是 ELK as a Service。此库可以让您使用 Sematext 从您的 iOS 应用程序中收集 移动分析 和 日志数据。对于从 Android 发送日志有等效的库可用。如果您没有 Sematext 账户,您可以通过 免费注册 获取您的 App 令牌。
使用 移动应用程序日志 集成获得即插即用的报告,报告包含有关您的移动应用程序的最重要信息。
通过以下信息了解您的移动应用程序概述
- 顶级 iOS 版本
- 顶级日志严重程度和版本名称
探索与您的移动应用程序相关的常见错误,并查看包括以下内容的聚合错误视图
- 错误数量及其随时间的变化
- 顶级操作系统、报告错误的顶级 iOS 版本
- 错误日志事件
从包括以下内容的专属 iOS 报告中获得洞察力
- 移动操作系统日志数量直方图及其计数
- 顶级严重程度、版本、版本代码和版本名称
- 移动应用程序日志事件
入门指南
- Logsene 为 iOS 的日志传输库可通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile 中
pod "Logsene"
- 运行
pod install
- 在
didFinishLaunchingWithOptions:
中从您的应用程序代理调用LogseneInit()
。例如
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
try! LogseneInit("<yourtoken>", type: "example")
}
}
有其他选项可用
receiverUrl
参数允许指定数据接收器,如果您使用的是我们的 EU 位置或 Sematext 企业版automaticLocationEnriching
参数启用自动从移动应用程序中填充位置数据到日志- 离线存储大小可以通过使用
maxOfflineFileSize
(默认值100000)和maxOfflineFiles
(默认值10)参数进行配置。离线存储的大小将等于maxOfflineFileSize
乘以maxOfflineFiles
。
注意:我们强烈建议在您的应用程序设置中创建一个只写令牌,用于在您的移动应用程序中使用。
示例应用
您可以使用Cocoapods尝试示例应用。
cd ~/Desktop
pod try Logsene
请确保在AppDelegate.swift
中设置您自己的应用程序令牌。
移动应用程序分析
您可以使用Sematext收集应用程序分析数据。为此,请使用LLogEvent()
函数发送自定义事件。例如,您可能希望每当用户完成游戏关卡时发送一个事件。
LLogEvent(["event": "level_completed", "message": "Level 3 completed", "value": "3"])
要可视化收集到的数据,您将使用集成Kibana仪表板。
如果您在仪表板中没有立即看到事件,请注意,此库会批量发送数据以节省电池(每60秒一次),或者如果有超过10条消息排队。消息在设备离线时保存,因此您不必担心丢失任何数据。
关于您事件的结构,您可以根据自己的喜好选择,上面的只是一个示例。您可以使用任意数量的字段,并且可以使用嵌套字段。基本上,任何有效的JSON对象都将正常工作。请注意,库为元信息保留meta
字段(见下文)。如果在发送事件时为此字段设置值,则不会包含该事件的任何元信息。
元字段
每个发送到Sematext的事件中都包含一些预定义的元字段。字段存储在“meta”字段中。
- versionName(应用程序版本字符串,例如1.0)
- versionCode(应用程序构建号,例如92)
- osRelease(iOS版本,例如9.3.0)
- uuid(设备标识符)
- OS类型(iOS)
您可以使用LogseneSetDefaultMeta
设置自己的元字段。例如
LogseneSetDefaultMeta(["user": "[email protected]", "plan": "free"])
请注意,这些元字段是全球性的,并将附加到发送到Logsene的每个事件中。
暂停 & 恢复日志发送
可以指示库按需停止发送日志。要这样做,您需要调用以下函数:
LogsenePauseSendingLogs()
可以调用以下函数恢复日志发送。
LogseneResumeSendingLogs()
注意,暂停时已在缓冲区中等待发送的日志将在日志发送过程恢复之前不会发送。
集中式日志记录
该库提供一些基本的集中式日志记录功能:
- LLogDebug
- LLogInfo
- LLogWarn
- LLogError
每个函数提供两种变体 - 不带和带有设备位置的记录消息或错误。
编写日志消息的示例
DDLogInfo("hello world!")
带有位置数据的日志消息的示例
let location = LogsLocation(fromLatitude: 53.13, fromLongitude: 23.16)
LLogInfo(withMessage: "hello world with location!", withLocation: location)
在iOS上自动丰富日志中的位置数据
如果您想允许库自动丰富日志数据中的位置数据,就像正确初始化库一样简单,例如:
LogseneInit("<yourtoken>", type: "example", automaticLocationEnriching: true, useLocationOnlyInForeground: true)
这里有两个属性:
- 自动位置丰富 - 当设置为true时,库将尝试将位置信息丰富到日志中,
- 仅在前台使用位置 - 当设置为true时,仅当应用程序在前台时才会收集位置。
除了正确设置 LogseneInit,您还需要确保在 Info.plist 文件中包含两个额外的字符串值,这些值将在询问用户允许收集位置数据时显示。这些都是:
- 隐私 - 总是使用位置和使用描述
- 隐私 - 使用时使用位置使用描述
自动位置丰富功能仅适用于iOS,不适用于MacOS。
有关与现有日志框架集成的信息,请参见下文。
CocoaLumberjack
如果您正在使用CocoaLumberjack进行日志记录,可以使用自定义的Logsene记录器将日志消息自动发送到Sematext。您应该将CocoaLumberjack配置为使用Logsene记录器
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// NOTE: Set your token below
try! LogseneInit("<yourtoken>", type: "example")
// Here we setup CocoaLumberjack to log to both XCode console and Logsene
DDLog.addLogger(DDTTYLogger.sharedInstance())
DDLog.addLogger(LogseneLogger())
DDLogInfo("hello world from CocoaLumberjack!")
return true
}
}
LogseneLogger不包含在pod中,但您可以在此处找到实现。请随意将其用于您的项目中。
如何记录未处理的异常
您可以通过定义自己的未捕获异常处理程序来记录任何未处理的Foundation异常。例如
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// NOTE: Set your token below
try! LogseneInit("<yourtoken>", type: "example")
NSSetUncaughtExceptionHandler { exception in
// log unhandled exception message
LLogError(exception)
}
return true
}
}