Spy 0.5.0

Spy 0.5.0

Tomasz Lewandowski 维护。



Spy 0.5.0

  • 作者
  • Tomasz Lewandowski

Build Status codecov Carthage compatible Cocoapods Platform Platform License

Spy 是一个灵活、轻量级的跨平台日志工具,使用 Swift 完全编写。它允许在不同的级别和通道上记录日志,您可以根据自己的需求自行定义。

要求

开发

项目使用以下工具进行开发

  1. XCodeGen
  2. CocoaPods
  3. SwiftLint
  4. Sourcery

安装

要开始使用 Spy,您首先必须决定如何将其集成到您的项目中。Spy 支持以下工具

CocoaPods

要使用 Cocoapods 安装 Spy,请按照以下步骤操作

  1. 在您的 Podfile 中添加以下条目
pod 'Spy'
  1. 然后运行 pod install

Carthage

要使用Carthage安装Spy,请按照以下步骤进行

  1. 请将以下条目添加到您的Cartfile
github "appunite/Spy"
  1. 然后运行carthage update

Swift包管理器

要使用Swift包管理器安装Spy,请按照以下步骤进行

  1. 在您的Package.swift中添加以下包依赖项:.package(url: "https://github.com/appunite/Spy.git", from: "0.5.0")
  2. 在您的Package.swift中添加以下目标依赖项:dependencies: ["Spy"])

例如,它可能看起来像这样

import PackageDescription

let package = Package(
    name: "YourLibrary",
    products: [
        .library(
            name: "YourLibrary",
            targets: ["YourLibrary"])
    ],
    dependencies: [
        .package(url: "https://github.com/appunite/Spy.git", from: "0.5.0")
    ],
    targets: [
        .target(
            name: "YourLibrary",
            dependencies: ["Spy"])
    ]
)

概述

以下是关于Spy使用的功能和概念的快速概述。

SpyChannel

SpyChannel是指实现了PSpyChannel协议的事物。频道可用于分类日志。通常,它们是用枚举实现的。您可以按照以下方式定义自己的频道:

public enum SpyChannel: String, PSpyChannel {
    case foo
    case bar
    
    public var channelName: String {
        return self.rawValue
    }
}

SpyLevel

SpyLevel是指实现了PSpyLevel协议的事物。您可以定义自己的级别,但Spy 还附带了一个预设集合供您使用,如果您愿意,可以采用它。这个集合称为 SpyLevel,其中包含以下警报级别: finest, finer, fine, config, info, warning, severe,按递增的警报优先级排序。

Spy配置

该配置包含Spy将监视的级别和频道。

间谍配置构建器

通过提供添加和移除功能,构建您的间谍配置,适用于各级别和渠道。示例用法

SpyConfigurationBuilder()
    .add(level: .severe)
    .add(channels: [.foo, .bar])
    .build()

可间谍化

可间谍化是一个可记录的实体,必须实现PSpyable协议。您可以定义自己的可间谍化实体或使用字符串作为基本的一个。

观察到

观察到是一个属性包装器,允许记录任何对属性的更改和访问。示例用法

class Foo {
    @Spied(spy: Environment.spy, onLevel: .info, onChannel: .foo) var foo = "foo"
}

间谍

间谍是实现了PSpy协议的任何东西。已经定义了一些间谍供您使用

  • ConsoleSpy - 使用print命令记录间谍化的间谍
  • FileSpy - 将间谍化记录到文件系统中(允许创建monolithchunked日志)
  • CompositeSpy - 将多个间谍组合为一个的间谍
  • AnySpy - 类型擦除式间谍 - 任何一个间谍都可以转换为AnySpy

使用log方法进行记录,如下所示

spy.log(level: .severe, channel: .foo, message: "Something bad happened")

ConsoleSpy

ConsoleSpy提供了两个可用的输出格式化器:RawSpyFormatterDecoratedSpyFormatter,后者可以通过装饰器进行扩展。您始终可以定义自己的输出格式化器。例如,RawSpyFormatter的输出可能如下所示

info::foo::Hello Spy

例如,DecoratedSpyFormatter的输出可能如下所示

ℹ️ info::foo::Hello Spy

Log example

示例

本例定义了间谍的示例。它使用 CompositeSpy 允许您登录多个目的地(《控制台》和《文件》)。

public static var spy: AnySpy<SpyLevel, SpyChannel> = {
    return CompositeSpy()
        .add(spy: ConsoleSpy<SpyLevel, SpyChannel, DecoratedSpyFormatter>(
            spyFormatter: DecoratedSpyFormatter(
                levelNameBuilder: DecoratedLevelNameBuilder<SpyLevel>()
                    .add(decorator: EmojiPrefixedSpyLevelNameDecorator().any())
                    ),
            timestampProvider: CurrentTimestampProvider(),
            configuration: SpyConfigurationBuilder()
                .add(levels: SpyLevel.levelsFrom(loggingLevel))
                .add(channel: .foo)
            .build()).any())
        .add(spy: FileSpy<SpyLevel, SpyChannel, DecoratedSpyFormatter>(
            logFile: LogFile(
                type: .chunked(maxLogsPerFile: 3),
                directoryURL: logDirectoryURL),
            spyFormatter: DecoratedSpyFormatter(
                levelNameBuilder: DecoratedLevelNameBuilder<SpyLevel>()
                    .add(decorator: EmojiPrefixedSpyLevelNameDecorator().any())
            ),
            timestampProvider: CurrentTimestampProvider(),
            configuration: SpyConfigurationBuilder()
                .add(level: .severe)
                .add(channels: [.foo, .bar])
                .build()).safe().any()
        ).any()
}()

通过使用预处理器,可以为调试和发布定义不同的日志级别。这样我们就可以在发布前不忘记关闭不重要的日志。

public extension Environment {
	static var loggingLevel: SpyLevel {
        #if DEBUG
        return .info
        #else
        return .warning
        #endif
    }
}

以下是使用间谍的方法

Environment.spy.log(level: .info, channel: .foo, message: "Hello Spy")

更详细的示例请参阅源代码。

贡献

该项目由 Tomasz Lewandowski 创建和维护。

如果您添加了新功能或修复了错误,您可以提出合并请求。如果您有任何功能请求,请随时提交。

许可

间谍是根据MIT许可证发布的。有关更多信息,请参阅 License.md