Emcee
36 строк · 970.0 Байт
1import Dispatch
2import EmceeLoggingModels
3import Foundation
4
5public final class AggregatedLoggerHandler: LoggerHandler {
6private var handlers: [LoggerHandler]
7private let syncQueue = DispatchQueue(label: "ru.avito.emcee.AggregatedLoggerHandler.syncQueue")
8
9public init(handlers: [LoggerHandler]) {
10self.handlers = handlers
11}
12
13public func handle(logEntry: LogEntry) {
14for handler in allHandlers_safe {
15handler.handle(logEntry: logEntry)
16}
17}
18
19public func append(handler: LoggerHandler) {
20syncQueue.sync {
21handlers.append(handler)
22}
23}
24
25private var allHandlers_safe: [LoggerHandler] {
26return syncQueue.sync { handlers }
27}
28
29public func tearDownLogging(timeout: TimeInterval) {
30for handler in allHandlers_safe {
31syncQueue.async {
32handler.tearDownLogging(timeout: timeout)
33}
34}
35}
36}
37