CommandLineToolkit

Форк
0
/
KibanaHandler.swift 
63 строки · 1.6 Кб
1
/*
2
 * Copyright (c) Avito Tech LLC
3
 */
4

5
import CLTLoggingModels
6
import Foundation
7
import Kibana
8

9
public final class KibanaLoggerHandler: LoggerHandler {
10
    private let group = DispatchGroup()
11
    private let kibanaClient: KibanaClient
12
    
13
    public enum SkipMetadataFlags: String {
14
        case skippingKibana
15
    }
16
    
17
    public init(kibanaClient: KibanaClient) {
18
        self.kibanaClient = kibanaClient
19
    }
20
    
21
    public func handle(logEntry: LogEntry) {
22
        guard !logEntry.coordinates.contains(where: { $0.name == SkipMetadataFlags.skippingKibana.rawValue }) else {
23
            return
24
        }
25
        
26
        do {
27
            var kibanaPayload = [
28
                "fileLine": "\(logEntry.file):\(logEntry.line)"
29
            ]
30
            
31
            for keyValue in logEntry.coordinates {
32
                kibanaPayload[keyValue.name] = keyValue.value ?? "null"
33
            }
34
            
35
            group.enter()
36
            try kibanaClient.send(
37
                level: logEntry.verbosity.levelForKibana,
38
                message: logEntry.message,
39
                metadata: kibanaPayload
40
            ) { [group] _ in
41
                group.leave()
42
            }
43
        } catch {
44
            group.leave()
45
        }
46
    }
47
    
48
    public func tearDownLogging(timeout: TimeInterval) {
49
        _ = group.wait(timeout: .now() + timeout)
50
    }
51
}
52

53
extension ContextualLogger {
54
    public var skippingKibana: ContextualLogger {
55
        withMetadata(key: KibanaLoggerHandler.SkipMetadataFlags.skippingKibana.rawValue, value: nil)
56
    }
57
}
58

59
extension Verbosity {
60
    var levelForKibana: String {
61
        stringCode.lowercased()
62
    }
63
}
64

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.