blob: ebd53d5ce43a813aced8c6456af5546cef426c73 [file] [log] [blame]
// Copyright 2016 The Tulsi Authors. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import Foundation
import TulsiGenerator
/// Writes events to the console.
final class EventLogger {
private let verboseLevel: TulsiMessageLevel
private var observer: NSObjectProtocol? = nil
init(verboseLevel: TulsiMessageLevel) {
self.verboseLevel = verboseLevel
}
deinit {
if let observer = self.observer {
NotificationCenter.default.removeObserver(observer)
}
}
func startLogging() {
observer = NotificationCenter.default.addObserver(forName: NSNotification.Name(rawValue: TulsiMessageNotification),
object: nil,
queue: nil) {
[weak self] (notification: Notification) in
guard let item = LogMessage(notification: notification),
let verboseLevel = self?.verboseLevel,
verboseLevel.logRank.rawValue >= item.level.logRank.rawValue else {
return
}
self?.logItem(item)
}
}
// MARK: - Private methods
private func logItem(_ item: LogMessage) {
let level: String = item.level.rawValue
let details: String
if let itemDetails = item.details {
details = " \(itemDetails)"
} else {
details = ""
}
print("[\(level)] \(item.message)\(details)")
}
}