guru_sdk/guru_app/plugins/persistent/ios/Classes/SwiftPersistentPlugin.swift

137 lines
4.5 KiB
Swift

import Flutter
import UIKit
struct PersistentLoggerConstants{
static let LOGGER_ID = "logger_id"
static let LOG_NAME = "log_name"
static let FILE_SIZE_LIMIT = "file_size"
static let FILE_COUNT = "file_count"
static let LEVEL = "level"
static let FORMATTER = "formatter"
static let FILE_ROLL_TIME = "file_roll_time"
static let ECHO = "echo"
static let MESSAGE = "msg"
}
enum Formatter:Int {
case MAIN = 0
case RAW = 1
}
public class SwiftPersistentPlugin: NSObject, FlutterPlugin {
public static func register(with registrar: FlutterPluginRegistrar) {
let channel = FlutterMethodChannel(name: "app.guru.persistent.LOG", binaryMessenger: registrar.messenger())
let instance = SwiftPersistentPlugin()
registrar.addMethodCallDelegate(instance, channel: channel)
}
public func handle(_ call: FlutterMethodCall, result: @escaping FlutterResult) {
// result("iOS " + UIDevice.current.systemVersion)
// PersistentPlugin.isEqual(self)
let arguments = call.arguments as? [String: Any] ?? [String: Any]()
switch call.method {
case "create_log":
createLogger(arguments: arguments, result: result)
break
case "clear_log":
clearLogger(arguments: arguments,result:result)
break
case "log":
logMessage(arguments: arguments,result:result)
break
case "get_log_root_dir":
getLogRootDir(arguments: arguments,result:result)
break
default:
result(FlutterMethodNotImplemented)
}
}
private func createLogger(arguments: [String: Any], result: @escaping FlutterResult) {
let logName =
arguments[PersistentLoggerConstants.LOG_NAME] as? String
let fileSizeLimit =
arguments[PersistentLoggerConstants.FILE_SIZE_LIMIT] as? UInt64
let fileRollTime = arguments[PersistentLoggerConstants.FILE_ROLL_TIME] as? TimeInterval
let fileCount =
arguments[PersistentLoggerConstants.FILE_COUNT] as? UInt
let echo =
arguments[PersistentLoggerConstants.ECHO] as? Bool ?? false
let formatter = arguments[PersistentLoggerConstants.FORMATTER] as? Int ?? Formatter.MAIN.rawValue
guard let fillName = logName else {
result(false)
return
}
let fileManager:DDLogFileManagerDefault = DDLogFileManagerDefault(logsDirectory: fillName)
let format:DDLogFileFormatterDefault? = formatter == Formatter.MAIN.rawValue ? DDLogFileFormatterDefault():nil
let fileLogger: DDFileLogger = DDFileLogger(logFileManager: fileManager, logfileFormatter:format)
if let fileSize = fileSizeLimit {
fileLogger.maximumFileSize = fileSize
}
if let fileRoll = fileRollTime {
fileLogger.rollingFrequency = TimeInterval(fileRoll)
}
if let fileCount = fileCount{
fileLogger.logFileManager.maximumNumberOfLogFiles = fileCount
}
if(echo){
fileLogger.canEchoMessage = true
}
// fileLogger.rollingFrequency = 60 * 60 * 24 // 24 hours
print(fileManager.logsDirectory)
DDLog.add(fileLogger)
result(true)
}
private func clearLogger(arguments: [String: Any], result: @escaping FlutterResult) {
let logName =
arguments[PersistentLoggerConstants.LOG_NAME] as? String
guard let logName = logName else {
result(false)
return
}
let remove = DDLog.removeFile(withName: logName)
result(remove)
}
private func logMessage(arguments: [String: Any], result: @escaping FlutterResult) {
let logName =
arguments[PersistentLoggerConstants.LOG_NAME] as? String
let logMessage = arguments[PersistentLoggerConstants.MESSAGE] as? String
guard let logName = logName,let logMessage = logMessage else {
result(false)
return
}
if(DDLog.getDirectoryWithFile(logName) == false){
result(false)
return
}
GuruLogDebug(targetFile: logName, logMessage)
result(true)
}
private func getLogRootDir(arguments: [String: Any], result: @escaping FlutterResult){
let rootPath = DDLog.rootLogsDirectory()
result(rootPath)
}
}