-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathOTelLogs.swift
73 lines (59 loc) · 2.18 KB
/
OTelLogs.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
//
// OTelLogs.swift
// AppO11yDemo
//
// Created by Robert Magnusson on 29.04.24.
//
import Foundation
import OpenTelemetryApi
import OpenTelemetrySdk
import OpenTelemetryProtocolExporterHttp
class OTelLogs {
static let instance = OTelLogs()
private init() {}
private var isInitialized = false
func initialize() {
guard isInitialized == false else { return }
isInitialized = true
let urlConfig = URLSessionConfiguration.default
urlConfig.httpAdditionalHeaders = OTelAuthProvider().getAuthHeader()
let otlpHttpLogExporter = OtlpHttpLogExporter(
endpoint: URL(string: "\(OTelConfig().endpointUrl)/v1/logs")!,
useSession: URLSession(configuration: urlConfig)
)
// Use `SimpleLogRecordProcessor` during development.
// let logProcessor = SimpleLogRecordProcessor(logRecordExporter:otlpHttpLogExporter)
// Use `BatchSpanProcessor` for production.
let logProcessor = BatchLogRecordProcessor(logRecordExporter:otlpHttpLogExporter)
let loggerProvider = LoggerProviderBuilder()
.with(processors: [logProcessor])
.with(resource: OTelResourceProvider().getResource())
.build()
OpenTelemetry.registerLoggerProvider(loggerProvider: loggerProvider)
}
func getLogger() -> Logger {
let otelConfig = OTelConfig()
return OpenTelemetry.instance.loggerProvider.loggerBuilder(
instrumentationScopeName: otelConfig.instrumentationScopeName
).setEventDomain("ios-device").build()
}
}
extension Logger {
func log(
_ message: String,
severity: Severity,
timestamp: Date = Date(),
attributes: [String: String] = [:]
) {
let otelAttributes = attributes.reduce(into: [String: AttributeValue]()) {
$0[$1.key] = AttributeValue.string($1.value)
}
self
.logRecordBuilder()
.setBody(AttributeValue.string(message))
.setTimestamp(timestamp)
.setAttributes(otelAttributes)
.setSeverity(severity)
.emit()
}
}