SwiftLogFireCloud Firebase 扩展

此库可用作 Apple SwiftLog 接口的实现,它可以捕获来自 iOS 和 (TODO: macOS) 应用程序的控制台日志,并将它们作为平面文件推送到 Firebase Cloud Storage 以供后续查看。 此库通常对基于时间的数据调查比基于事件的日志记录调查更有帮助。 它的实现固有地偏向于保持客户端应用程序的良好用户体验,因此选择丢失日志,而不是消耗带宽或进行过多的重试失败处理。 控制库是否将日志记录到云端可以由客户端应用程序管理,甚至可以通过 Firestore 文档监听器远程管理,这部分内容留给读者自行实现。

这不是 Google 官方支持的产品。

如何将 SwiftLogFireCloud 添加到您的应用程序

  1. 在您的 Xcode 项目中,选择 File -> Swift Packages -> Add Package Dependencies

  2. 在搜索栏中输入 https://github.com/google/swiftlogfirecloud

  3. 选择 master 作为分支,或根据您的需要选择适当的版本

  4. 在您的项目中添加并初始化 Firebase,如果尚未完成。请参阅 https://firebase.google.com/docs/ios/setup

  5. 在您的应用程序中创建一个符合 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)))
       	}
       }
     }
    
  6. 在您的 AppDelegate 中添加 import Loggingimport SwiftLogFireCloud

  7. 在您的 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")
    
  8. 最后,无论您想在代码中的何处记录日志,添加 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