Bulk / BulkLogger
Bulk是一个用于缓冲对象的库。Pipeline(Sink)接收对象并发出缓冲的对象。
用途是什么?
在多个情况下打包大量元素将非常有用。例如,使用您自己的API发送产品的分析事件。
- 收集许多事件
- 将其打包成一个
- 将这些事件作为一个事件集发送。
Bulk模块
创建一个sink
我们称接收对象的pipeline为Sink
。
Sink
接收对象并将缓冲的对象发表到多个目标。
- 选择缓冲区。
要创建一个批量,我们可以选择几种类型的缓冲区。
目前,Bulk提供了以下2种。
- MemoryBuffer
- FileBuffer
在这个教程中,我们选择MemoryBuffer。
- 创建目标
目标从Sink接收缓冲的对象。
“Bulk”没有提供默认实现的“目标”。
现在,您需要创建它。
public protocol TargetType {
associatedtype Element
func write(items: [Element])
}
struct MyTarget<Element>: TargetType {
func write(items: [Element]) {
print(items)
}
}
最后,创建“BulkSink”对象。
let sink = BulkSink<String>(
buffer: MemoryBuffer.init(size: 10).asAny(),
targets: [
MyTarget<String>().asAny()
]
)
发送对象。
sink.send("A")
sink.send("B")
sink.send("C")
sink
当缓冲区接收到指定大小(示例中为10个元素)的对象时,发送聚合后的对象。
“BulkLogger”模块
“Logger”作为Bulk之上的库。
BulkLogger提供Logger
对象,该对象将内部的Sink
封装起来。
let logger = Logger(context: "", sinks: [
BulkSink<LogData>(
buffer: MemoryBuffer.init(size: 10).asAny(),
targets: [
TargetUmbrella.init(
transform: LogBasicFormatter().format,
targets: [
LogConsoleTarget.init().asAny()
]
).asAny(),
OSLogTarget(subsystem: "BulkDemo", category: "Demo").asAny()
]
)
.asAny()
])
Logger对象将日志数据发送到两个目标(LogConsoleTarget和OSLogTarget)。
logger.verbose("Hello")
许可证
Bulk框架是根据MIT许可证发布的。