此库可用作 Apple SwiftLog 接口的实现,它可以捕获来自 iOS 和 (TODO: macOS) 应用程序的控制台日志,并将它们作为平面文件推送到 Firebase Cloud Storage 以供后续查看。 此库通常对基于时间的数据调查比基于事件的日志记录调查更有帮助。 它的实现固有地偏向于保持客户端应用程序的良好用户体验,因此选择丢失日志,而不是消耗带宽或进行过多的重试失败处理。 控制库是否将日志记录到云端可以由客户端应用程序管理,甚至可以通过 Firestore 文档监听器远程管理,这部分内容留给读者自行实现。
这不是 Google 官方支持的产品。
在您的 Xcode 项目中,选择 File -> Swift Packages -> Add Package Dependencies
在搜索栏中输入 https://github.com/google/swiftlogfirecloud
。
选择 master
作为分支,或根据您的需要选择适当的版本
在您的项目中添加并初始化 Firebase,如果尚未完成。请参阅 https://firebase.google.com/docs/ios/setup
在您的应用程序中创建一个符合 CloudFileUploaderProtocol
协议的对象,并实现 uploadFile
方法,如下所示:
import Foundation
import Firebase
import SwiftLogFireCloud
final class SwiftLogFireCloudUploader : CloudFileUploaderProtocol {
private let storage: Storage
init(storage: Storage) {
self.storage = storage
}
func uploadFile(from localFile: LocalLogFile, to cloudPath: String, completion: @escaping (Result<LocalLogFile, CloudUploadError>) -> Void) {
let storageReference = self.storage.reference()
let cloudReference = storageReference.child(cloudPath)
let uploadTask = cloudReference.putFile(from: localFile.fileURL, metadata: nil) { metadata, error in
if let error = error {
print(error.localizedDescription)
completion(.failure(CloudUploadError.failedToUpload(localFile)))
}
}
_ = uploadTask.observe(.success) { snapshot in
completion(.success(localFile))
}
_ = uploadTask.observe(.failure) { snapshot in
completion(.failure(CloudUploadError.failedToUpload(localFile)))
}
}
}
在您的 AppDelegate
中添加 import Logging
和 import SwiftLogFireCloud
在您的 AppDelegate
方法 didFinishLaunchingWithOptions
中添加以下内容:
//Create the client impl of the FirebaseStorage uploader
logUploader = SwiftLogFireCloudUploader(storage: Storage.storage())
//Configure and initialize the SwiftLogFireCloud library
let config = SwiftLogFireCloudConfig(
logToCloud: true,
localFileSizeThresholdToPushToCloud: 1024*1024*3,
logToCloudOnSimulator: false,
cloudUploader: logUploader)
let swiftLogFileCloudManager = SwiftLogFileCloudManager()
//Bootstrap SwiftLog...make sure this is only run once
LoggingSystem.bootstrap(swiftLogFileCloudManager.makeLogHandlerFactory(config: config))
//Create a logger
logger = Logger(label: "SwiftLogFireCloudExampleAppLogger")
最后,无论您想在代码中的何处记录日志,添加 import Logging
并按如下方式记录日志:logger?.info("I am a log message")
仓库中的示例项目 SwiftLogFireCloudExampleApp 演示了一个使用 SwiftLog 进行日志记录的工作客户端应用程序。
SwiftLog 接口最初显然是为服务器端的 Swift 设计的,因此 SwiftLog 没有与 Apple 平台上的 OSLog 集成。 因此,至关重要的是,客户端应用程序开发人员在使用 SwiftLogFireCloud 时要谨慎,并且不要使用 SwiftLogFireCloud 从客户端设备记录个人身份信息,因为这些信息将到达您的 Firebase Storage 存储桶。
此库违反了软件工程的基本规则:永远不要让软件工程经理编写代码。 买者自负。
在 Apache License, Version 2.0(“许可证”)下获得许可;除非遵守许可证,否则您不得使用此作品。您可以在以下网址获得许可证副本:https://apache.ac.cn/licenses/LICENSE-2.0