blob: 9120dcb88687a2d5a5a8b2ac1b9490cc729429ea (
plain)
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
72
73
74
75
76
77
78
79
|
//
// Logging.swift
// MullvadVPN
//
// Created by pronebird on 02/08/2020.
// Copyright © 2020 Mullvad VPN AB. All rights reserved.
//
import Foundation
@_exported import Logging
public func initLoggingSystem(
bundleIdentifier: String,
applicationGroupIdentifier: String,
metadata: Logger.Metadata? = nil
) {
let containerURL = FileManager.default.containerURL(
forSecurityApplicationGroupIdentifier: applicationGroupIdentifier
)!
let logsDirectoryURL = containerURL.appendingPathComponent("Logs", isDirectory: true)
let logFileName = "\(bundleIdentifier).log"
let logFileURL = logsDirectoryURL.appendingPathComponent(logFileName)
// Create Logs folder within container if it doesn't exist
try? FileManager.default.createDirectory(
at: logsDirectoryURL,
withIntermediateDirectories: false,
attributes: nil
)
// Rotate log
var logRotationError: Error?
do {
try LogRotation.rotateLog(
logsDirectory: logsDirectoryURL,
logFileName: logFileName
)
} catch {
logRotationError = error
}
// Create an array of log output streams
var streams: [TextOutputStream] = []
// Create output stream to file
if let fileLogStream = TextFileOutputStream(fileURL: logFileURL, createFile: true) {
streams.append(fileLogStream)
}
// Configure Logging system
LoggingSystem.bootstrap { label -> LogHandler in
var logHandlers: [LogHandler] = []
#if DEBUG
logHandlers.append(OSLogHandler(subsystem: bundleIdentifier, category: label))
#endif
if !streams.isEmpty {
logHandlers.append(CustomFormatLogHandler(label: label, streams: streams))
}
if logHandlers.isEmpty {
return SwiftLogNoOpLogHandler()
} else {
var multiplex = MultiplexLogHandler(logHandlers)
if let metadata = metadata {
multiplex.metadata = metadata
}
return multiplex
}
}
if let logRotationError = logRotationError {
Logger(label: "LogRotation").error(
error: logRotationError,
message: "Failed to rotate log"
)
}
}
|