CRDLog
Simple straightforward Swift-based logging facility for iOS, macOS, watchOS, and tvOS apps
概述
你在制作的应用中经常遇到的一个需求是将应用中的重要活动记录到日志文件中,并为用户提供发送日志给你的方式,以诊断和排除可能在现场出现的故障。多年来,我已经为日志问题编写了几个解决方案,但决定编写另一个简单易用、适用于基于Swift的项目解决方案。
要求
- iOS 9.0+ / macOS 10.12+ / watchOS 3.0+ / tvOS 9.0+
- Xcode 10.2+
- Swift 5.0+
安装
您可以简单地从GitHub树结构中复制以下文件到您的项目中:
-
CRDLog.swift
- 该类实现了您的应用的一个完整的日志记录工具。
-
CRDLogDelegate.swift
- 一个类可以实现的协议,以提供写入日志文件时的第一个消息的头部内容。
CocoaPods
或者,您可以将它作为CocoaPod安装
CocoaPods 是Cocoa项目的依赖管理器。您可以使用以下命令安装它
$ gem install cocoapods
建立CRDLog需要CocoaPods 1.7.0及以上版本。
要使用CocoaPods将CRDLog整合到您的Xcode项目中,请在您的 Podfile
中指定它
target 'MyApp' do
use_frameworks!
# Pods for MyApp
pod 'CRDLog'
end
然后,运行以下命令
$ pod install
Carthage
您可以使用Carthage为您的项目添加此框架
- 将一个
Cartfile
添加到包含您的 xcodeproj 文件的目录中。 - 编辑此文件以指定此框架的 1.0.4 或更高版本发布
github "cdisdero/CRDLog" >= 1.0.4
- 运行Carthage以添加框架源并构建此框架
carthage update
- 在您的Xcode项目应用目标的“常规”选项卡中,将您的目标类型的Carthage构建框架拖放到底部的“链接框架和库”列表中。您可以在项目目录的子目录 Carthage/Build/[target]/CRDLog.framework 中找到构建框架,其中 [target] 是类似 'iOS' 等的名称。
- 为了确保框架释放应用程序没有多余CPU类型,请在您的应用程序目标中添加以下运行脚本构建阶段
/usr/local/bin/carthage copy-frameworks
这假设Carthage已安装在本系统的 /usr/local/bin
中。在同一运行脚本构建阶段中,还指定以下输入文件
$(SRCROOT)/Carthage/Build/iOS/CRDLog.framework
使用方法
该库易于使用。只需导入CRDLog并在日志类中创建一个实例
let log = CRDLog(logDelegate: self)
delegate
参数允许您传递实现CRDLogDelegate协议的类的实例。我们将在写入空的日志的初始内容时使用它来提供日志标题。
您也可以通过指定日志文件名来构造CRDLog的实例
let log = CRDLog(logFileName: "myapp.log", logDelegate: self)
logFileName
的默认值为 'app.log',如果不指定。日志文件名附加到可丢弃的缓存文件(通常是 Library/Caches)的路径上,以形成存储中日志文件的路径名。
然后我们可以使用方法将消息写入日志,例如
log.info("This is a log message")
log.warn("This is a warning")
log.error("This is an error")
您可以使用 info
方法以INFO标签记录信息消息,使用 warn
方法记录警告消息(日志中将具有WARN标签),使用 error
记录错误(标签为ERROR)。
您写入日志的第一条消息将包含标题。要提供日志使用的标题,您应在实现CRDLog的类的实例中实现 CRDLogDelegate
协议。
在上面的示例中,我们创建实例 log
的时候会做这个操作
let log = CRDLog(logDelegate: self)
我们需要在传入的日志代理类中实现 CRDLogDelegate 方法的 logHeader()
func logHeader() -> String? {
return "This is my header"
}
CRDLog 在需要将标题写入日志时调用此实例方法。
您随时可以清除日志内容。
log.clear()
清除后,接下来写入的消息将会有标题,如果有,将通过上述讨论的 CRDLogDelegate 方法 logHeader()
进行。
您也可以通过调用来获取日志的当前内容。
log?.contentsWithCompletion { (result: String?) in
print("The contents of the log is:\r\n\(result)")
}
您可以通过设置 enableLogging
属性在任何时候启用/禁用将日志写入文件。
log?.enableLogging = true // Enables logging to the file.
...
log?.enableLogging = false // Disables logging to the file.
即使在 enableLogging
为 false 的情况下,所有日志输出也会发送到 Xcode 的调试控制台。
结论
希望这个小库/框架对您的下一个 Swift 项目的开发有所帮助。我会按照时间和意愿进行更新,并当然欢迎您的所有反馈。
许可
CRDLog 在 Apache 2.0 许可下发布。详细信息请参阅 LICENSE。