blob: b96d9dc08d3d44c66acb151f5ed9118662f2296a (
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
|
//
// Logging.swift
// MullvadVPN
//
// Created by pronebird on 02/08/2020.
// Copyright © 2020 Mullvad VPN AB. All rights reserved.
//
import Foundation
import Logging
func initLoggingSystem(bundleIdentifier: String) {
let containerURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: ApplicationConfiguration.securityGroupIdentifier)!
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
let logRotationResult = LogRotation.rotateLog(logsDirectory: logsDirectoryURL, logFileName: logFileName)
// 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 {
return MultiplexLogHandler(logHandlers)
}
}
if case .failure(let logRotationError) = logRotationResult {
Logger(label: "LogRotation")
.error(chainedError: logRotationError, message: "Failed to rotate log")
}
}
|