Cosmic
Cosmic 是一个用 Swift 编写的日志报告框架。
关于
Cosmic 提供了一个简单的接口,用于强大的日志功能,包括
- 针对多种用例的预配置日志记录器
- 支持 Logz.io、Loggly 和 Papertrail 等服务的 HTTP 和 Socket 基于的日志记录器
- Syslog 和 JSON 等多种日志标准的格式化工具
- 按类或模块过滤日志
安装
Cocoapods
pod 'Cosmic', '~> x.y.z'SPM
.Package(url: "https://github.com/jnewc/Cosmic", majorVersion: <MAJORVERSION>)使用
在您的类中支持日志记录器的最简单方法是对 DefaultLogReporter 协议进行扩展
import Cosmic
class MyClass: DefaultLogReporter {
// ...
}扩展 DefaultLogReporter 协议将为您的类添加一个可以用于报告日志信息的日志属性
func logSomething() {
// Debug level
self.logger.debug("Logging something")
// Info level
self.logger.info("Logging something")
// Warn level
self.logger.warn("Logging something")
// Error level
self.logger.error("Logging something")
}默认情况下,LogReporter 提供的日志记录器将是一个 PrintLogger 实例,这可以通过实现 LogReporter 协议及其相关的 DefaultLoggerType 类型来更改
class MyClass: LogReporter {
typealias DefaultLoggerType: Logger = PrintLogger
// ...
}或者,如果您想自己管理日志记录器,可以按需简单地实例化它们
let myLogger: Logger = PrintLogger()扩展
您可以通过实现 LogReceiver 协议来创建自己的日志记录器
class MyLogger: LogReceiver {
func onReceive(_ messages: [String], logLevel: LogLevel) {
// Do something with the log
}
}(仅在有效日志级别时调用 onReceive 方法,因此这里不需要基于日志级别进行筛选。)
您可以在初始化器中添加格式化程序
init() {
formatters.append(SyslogFormatter())
}并且您可以使用 format 方法来格式化您的消息
func onReceive(_ messages: [String], logLevel: LogLevel) {
messages.forEach { print(format($0)) }
}组合日志记录器
Cosmic 为更复杂的用例提供了 CompositeLogger。 CompositeLogger 将日志路由到多个日志记录器。
组合日志记录器的日志级别会 transitively 作用于其所有组件日志记录器。
以下示例描述了一个同时向控制台、文件和 TCP 套接字记录日志的日志记录器
let printLogger = PrintLogger()
let memoryLogger = MemoryLogger()
let socketLogger = SocketLogger(...)
let logger = CompositeLogger(printLogger, fileLogger, socketLogger)过滤日志记录器
您可以通过向 LogFilters.global 缓存中添加一个 LogFilter 来过滤日志记录器。以下示例排除了所有名为 MyLogger 的基于 Logger 类型的实例。
let filter = ClassBasedLogFilter()
filter.excluded.append(MyLogger.self)
LogFilters.global.addFilter(filter: filter)注意:ClassBasedLogFilter 在使用时 included 和 excluded 是互斥的。如果两者都包含类型,则使用 included 而忽略 excluded。