Log4swift 1.2.0

Log4swift 1.2.0

测试测试
语言语言 Obj-CObjective C
许可 Apache-2.0
发布最后发布2020年10月

Jerome Duquennoy 维护。



Log4swift 1.2.0

  • Jerome Duquennoy

Log4Swift

License Platform Language Cocoapod Carthage compatible Travis-ci Build Status

Log4Swift 是一个用于 Swift 项目的日志库,它将允许您以非常灵活的方式记录。

其最终目标是成为让您的日志具有尽可能高的价值的工具,无论是在开发环境中还是在生产环境中。

兼容性

当前版本需要 Xcode 9 和 swift 4.1。

它可以在针对 OS X (> = 10.10), iOS (> = iOS 8) 或 appleTV 的项目中使用,并且可以以 swift 或 objective-C (或这两个的结合) 编写。

如何使用

手动安装

在您的机器上克隆此仓库,并编译满足您需求的目标版本(OS X、iOS、...)。这将生成一个可用于项目的库。由于Swift ABI目前不稳定,如果您更改项目的编译器版本,您将需要重新编译库。正因为如此,您最好考虑其他方法(请参见下文)。

CocoaPod

将这些行添加到Podfile中,以在iOS项目中嵌入此库(指定库和目标的版本)

platform :ios, '8'
pod 'Log4swift', '1.2.0'
use_frameworks!

在OS X项目中

platform :osx, '10.10'
pod 'Log4swift', '1.2.0'
use_frameworks!

Carthage

将此行添加到Cartfile中(指定所需的版本)

github "jduquennoy/Log4swift" ~> 1.2.0

特性

以下是您可以从Log4swift期望的主要特性

  • 适用于简单情况:默认配置应该正常工作,对于将日志输出到IDE控制台或系统日志等典型用途,只需一行配置即可
  • 适用于更复杂的情况,具有多目的地记录、分层日志记录器配置等
  • 支持多个目的地,包括使用NSLogger的网络日志记录
    • 文件日志记录
    • 使用NSLogger的网络日志记录
    • Xcode控制台日志记录,包括着色日志(已安装XcodeColors插件)
  • 可以通过代码动态配置
  • 可以通过文件配置,具有更新时自动重载的可能性(可选功能)
  • 异步日志记录,在副线程上执行(可选功能)。可以按日志记录器启用/禁用异步行为。

另一个目标,我认为我们都认同,就是要有一个可读性和经过充分测试的代码。

  • Log4swift代码的覆盖率(不包括第三方代码)对于大多数源文件都是100%,对于其他几个文件也非常接近。
  • 如果您觉得代码不够易读,或者有提高代码质量的建议,请随时发送反馈或参与贡献!

概念

这个库的三个主要概念来源于log4j。

Logger

Logger是首先接收日志的对象。它们通过一个层次结构的UTI标识符(如"project.module.function")来识别。当发送日志消息时,将负责处理日志的具有最长匹配UTI的logger。根logger将处理没有特定logger匹配的日志。

Logger定义了一个阈值级别。低于此级别的日志将被忽略。未忽略的级别会发送到与logger关联的appender。

Appender

Appender连接到logger。它们负责将日志写入其目的地。它们通过一个标识符来识别,当加载配置以将appender附加到它们的logger时使用。一个appender可以被附加到多个logger。

Appender也有一个阈值以过滤消息。

格式化程序

格式化程序连接到appender。它们的任务是在消息发送到终极目的地之前将其进行特定格式化。一个格式化程序可能会连接到多个appender。

关于功能的一些详细信息

每个logger多个appender

一个日志记录器可以有多个附加器。例如,您可以定义一个将所有内容记录到控制台,但将错误消息记录到文件供以后使用的日志记录器。

let logger = Logger.getLogger("test.logger");
let stdOutAppender = StdOutAppender("console");
let fileAppender = FileAppender(identifier: "errorFile", filePath: "/var/log/error.log");

stdOutAppender.thresholdLevel = .Debug;
fileAppender.thresholdLevel = .Error;
logger.appenders = [stdOutAppender, fileAppender];

logger.debug ("This message will go to the console");
logger.error ("This message will go to the console and the error log file");  }

(该代码在Xcode 7.3下编译,使用swift 2.2)

附加器关联的格式化工具

格式化工具允许您对日志消息应用特定的格式,既可以向记录的消息添加信息,也可以修改消息以满足某些约束。

格式化工具与附加器相关联。这样,您可以将可读性强的日志记录到Xcode的控制台,同时在文件中记录信息更丰富的正则表达式友好格式的日志。

使用闭包记录日志

如果生成消息的代码很重,提供闭包而不是字符串会比较方便:只有当需要记录日志时才会执行闭包。无需在条件结构中封装代码。

Logger.debug { someHeavyCodeThatGeneratesTheLogMessage() }

请注意,创建块不是完全没有成本的(幕后发生了某些魔法,如变量捕获)。但对于大多数用途,成本应该是微不足道的。

异步记录日志

可以单独配置日志记录器以异步记录。异步记录将在请求日志时几乎立即返回,而实际的日志将在较低优先级的线程上后台发布。

保证异步日志记录器记录的消息顺序。

请注意,如果异步日志记录器将在以后的时间执行记录的闭包,并且在外部线程上。

灵活的配置

可以从文件或使用库的API配置记录器。

使用API,您可以使用可以存储和从任何地方加载的字典(网络服务、数据库、首选项文件等)。

使用配置文件,您可以在文件修改时请求自动重新加载配置。

LoggerFactory.sharedInstance.readConfiguration(fromPlistFile: "/some/file.plist", autoReload: true)

可以在运行时修改配置。

提供appenders

标准输出appender

此appender会将日志消息写入到stdout或stderr。它有两个阈值:常规阈值和错误阈值。

  • 如果日志级别低于普通阈值,则忽略消息
  • 如果日志级别高于普通阈值但低于错误阈值,则消息将在stdout上发布
  • 如果日志级别高于普通和错误阈值,则消息将在stderr上发布

默认情况下,标准输出appender配置为将错误和致命消息发送到stderr,并将所有其他级别发送到stdout。

此appender是CLI工具的良好选择。

文件appender

此appender会将日志消息写入到指定路径的文件中。如果需要(并且可能),它会创建文件,并在它消失时重新创建它。这允许日志轮换脚本在轮换后确保日志被记录在新文件中而无需重启进程。

NSLogger appender

此appender使用NSLogger (https://github.com/fpillet/NSLogger)在网络中发送日志消息。尚不支持NSLogger的所有功能:只能记录文本消息。

ASL appender

ASL 添加器将日志消息发送到由 Apple 提供的系统日志服务。如果 ASL 配置未被自定义,您的消息将在 Console.app 应用程序中可见。

对于专门针对不具有统一日志系统的系统发布的软件版本,这是一个不错的选择。

注意:从 MacOS 10.12 开始,Apple 已经弃用了 ASL。对于这些平台,应使用统一日志记录器添加器替代 ASL。

统一日志系统添加器

从 MacOS 10.12 开始,统一日志系统是 ASL 的替代品。此记录器将消息记录到该设施。您的消息将在 Console.app 应用程序中可见。

对于针对 10.12 及以后版本软件的发布版本,这是一个不错的选择。

系统添加器

此元添加器将使用适用于当前系统的最合适的系统添加器。

  • 对于 MacOS < 10.12,它将使用 ASLAppender
  • 对于 MacOS >= 10.12,它将使用统一日志系统添加器。

对于针对多个系统版本(最常见情况)的软件发布版本,这是一个最佳选择。

提供的格式化器

PatternFormatter

PatternFormatter 使用简单文本模式,其中标记由 `%` 前缀标识来渲染日志消息。

例如,此模式

[%d][%l][%n] %m

将产生此类日志

[2015-02-02 12:45:23 +0000][Debug][logger.name] The message that was sent to the logger

有关更多详细信息,包括可用标记的完整列表,请参阅此页面