TM-SGNL-iOS/SignalServiceKit/Util/PrefixedLogger.swift
TeleMessage developers dde0620daf initial commit
2025-05-03 12:28:28 -07:00

125 lines
3 KiB
Swift

//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import Foundation
open class PrefixedLogger {
private let prefix: String
private var suffix: String
public static func empty() -> PrefixedLogger {
return PrefixedLogger(rawPrefix: "")
}
public init(prefix: String, suffix: String? = nil) {
self.prefix = "\(prefix) "
self.suffix = suffix.map { " \($0)" } ?? ""
}
private init(rawPrefix: String, rawSuffix: String? = nil) {
self.prefix = rawPrefix
self.suffix = rawSuffix ?? ""
}
public func suffixed(with extraSuffix: String) -> PrefixedLogger {
return PrefixedLogger(
prefix: prefix,
suffix: suffix + " \(extraSuffix)"
)
}
open func verbose(
_ logString: @autoclosure () -> String,
flushImmediately: Bool = false,
file: String = #fileID,
function: String = #function,
line: Int = #line
) {
Logger.verbose(
buildLogString(logString()),
file: file,
function: function,
line: line
)
if flushImmediately { flush() }
}
open func debug(
_ logString: @autoclosure () -> String,
flushImmediately: Bool = false,
file: String = #fileID,
function: String = #function,
line: Int = #line
) {
Logger.debug(
buildLogString(logString()),
file: file,
function: function,
line: line
)
if flushImmediately { flush() }
}
open func info(
_ logString: @autoclosure () -> String,
flushImmediately: Bool = false,
file: String = #fileID,
function: String = #function,
line: Int = #line
) {
Logger.info(
buildLogString(logString()),
file: file,
function: function,
line: line
)
if flushImmediately { flush() }
}
open func warn(
_ logString: @autoclosure () -> String,
flushImmediately: Bool = false,
file: String = #fileID,
function: String = #function,
line: Int = #line
) {
Logger.warn(
buildLogString(logString()),
file: file,
function: function,
line: line
)
if flushImmediately { flush() }
}
open func error(
_ logString: @autoclosure () -> String,
flushImmediately: Bool = false,
file: String = #fileID,
function: String = #function,
line: Int = #line
) {
Logger.error(
buildLogString(logString()),
file: file,
function: function,
line: line
)
if flushImmediately { flush() }
}
open func flush() {
Logger.flush()
}
private func buildLogString(_ logString: String) -> String {
"\(prefix)\(logString)\(suffix)"
}
}