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