PlainLogger 0.1.1

PlainLogger 0.1.1

Burak Akkaş 维护。



  • Burak Akkaş

PlainLogger

Version Platform

示例

要运行示例项目,请克隆仓库,并首先从 Example 目录运行 pod install

要求

iOS 11.0 及以上。

安装

PlainLogger 通过 CocoaPods 提供使用。要安装它,只需在 Podfile 中添加以下行

pod 'PlainLogger'

使用方法

首先,导入 PlainLogger

import PlainLogger

配置

建议您在AppDelegate上配置PlainLogger。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    let configuration = PlainLogger.Configuration(
                                        // Enable or disable logger
                                        enabled: true,
                                      
                                        // Logging level (.verbose, .info, .error, .debug)
                                        level: .verbose,

                                        // Logging date format
                                        dateFormat: "dd/MM/yyyy HH:mm",

                                        // Enable indicators (emojis) for easy to read logging on console
                                        indicatorsEnabled: true,

                                        // Specify indicators for each logging level
                                        indicatorScheme: PlainLogger.IndicatorScheme(),

                                        // Specify console logging template
                                        consoleLoggingTemplate: nil,

                                        // Specify data store providers for logging
                                        providers: [DefaultDiskDataStoreProvider()])
                                          
    PlainLogger.configure(with: configuration)
    
    return true
}

使用方法

PlainLogger.debug(tag: "Tag debug", message: "Log debug")
PlainLogger.error(message: "Log error")
PlainLogger.info(message: "Log info")
PlainLogger.verbose(message: "Log verbose")

高级配置

PlainLogger有更多配置项。

控制台日志模板

您可以按照以下方式组织由PlainLogger生成的控制台日志

// Default console logging template and its preview
let template =  "#line_break# #logger_signature# #log_level# #date#" +      // [📋 Log] [🔎 Error] [⏰ 01/02/2019 10:51]
                "#line_break# #indicator# Tag: #tag#" +                     //  🔴 Tag: Test tag
                "#line_break# #indicator# Message: #message#" +             //  🔴 Message: Test error
                "#line_break# #indicator# Function: #function#" +           //  🔴 Function: viewDidLoad()
                "#line_break# #indicator# File: #file#" +                   //  🔴 File: ViewController.swift
                "#line_break# #indicator# Line: #line#, Column: #column#"   //  🔴 Line: 19, Column: 18
                
// Configure logger with given template
let configuration = PlainLogger.Configuration(consoleLoggingTemplate: template)
PlainLogger.configure(with: configuration)

数据存储提供商

PlainLogger会在每次日志操作时在给定的提供商上触发store()方法。这可以通过以下方式配置

let configuration = PlainLogger.Configuration(providers: [DefaultDiskDataStoreProvider()])
PlainLogger.configure(with: configuration)

例如,提供了2种不同的数据存储提供商,即DefaultHttpDataStoreProvider(将日志POST到给定的API路径)和DefaultDiskDataStoreProvider(按用户默认值存储日志),但您可以实现自己的数据存储提供商,通过实现LogDataStoreProvider协议。

// LogDataStoreProvider protocol
public protocol LogDataStoreProvider {
    func store(log: LogDataStoreModel)
    
    // Data store providers identificaton
    func identification() -> String
}

// Example implementation for LogDataStoreProvider
public class DefaultDiskDataStoreProvider: LogDataStoreProvider {
    let userDefaults = UserDefaults.standard
    let diskDataStoreKey = "LoggerDiskDataStoreKey"
    
    public init() {}
    
    public func store(log: LogDataStoreModel) {
        if let logData = userDefaults.object(forKey: diskDataStoreKey) as? Data {
            if var logs = try? NSKeyedUnarchiver.unarchivedObject(ofClasses: [LogDataStoreModel.self], from: logData) as? [LogDataStoreModel] {
                logs?.append(log)
                if let newData = try? NSKeyedArchiver.archivedData(withRootObject: logs as Any, requiringSecureCoding: false) {
                    userDefaults.set(newData, forKey: diskDataStoreKey)
                }
            }
        } else {
            if let newData = try? NSKeyedArchiver.archivedData(withRootObject: [log] as Any, requiringSecureCoding: false) {
                userDefaults.set(newData, forKey: diskDataStoreKey)
            }
        }
    }
    
    public func identification() -> String {
        return "DefaultDiskDataStoreProvider"
    }
}

指示器方案

您可以通过IndicatorScheme对象配置指示器方案。

let scheme = PlainLogger.IndicatorScheme(   debug: .normal,   // 🙂
                                            info: .blue,      // 🔵
                                            verbose: .white,  // 💀
                                            error: .red)      // 🔴
                                         
let configuration = PlainLogger.Configuration(indicatorScheme: scheme)
PlainLogger.configure(with: configuration)

作者

Burak Akkaş

许可

PlainLogger 按照MIT许可协议提供。更多信息请参阅 LICENSE 文件。