Initial commit

This commit is contained in:
oscarz
2024-08-12 10:49:20 +08:00
parent 3002510aaf
commit 00fd0adf89
331 changed files with 53210 additions and 130 deletions

View File

@ -0,0 +1,130 @@
//
// ConsoleDestination.swift
// SwiftyBeaver
//
// Created by Sebastian Kreutzberger on 05.12.15.
// Copyright © 2015 Sebastian Kreutzberger
// Some rights reserved: http://opensource.org/licenses/MIT
//
import Foundation
#if canImport(OSLog)
import OSLog
#endif
open class ConsoleDestination: BaseDestination {
public enum LogPrintWay {
case logger(subsystem: String, category: String)
case nslog
case print
}
/// Use this to change the logging method to the console. By default, it is set to .print. You can switch to .logger(subsystem:category:) to utilize the OSLog API.
public var logPrintWay: LogPrintWay = .print
/// use NSLog instead of print, default is false
public var useNSLog = false {
didSet {
if useNSLog {
logPrintWay = .nslog
}
}
}
/// uses colors compatible to Terminal instead of Xcode, default is false
public var useTerminalColors: Bool = false {
didSet {
if useTerminalColors {
// use Terminal colors
reset = "\u{001b}[0m"
escape = "\u{001b}[38;5;"
levelColor.verbose = "251m" // silver
levelColor.debug = "35m" // green
levelColor.info = "38m" // blue
levelColor.warning = "178m" // yellow
levelColor.error = "197m" // red
levelColor.critical = "197m" // red
levelColor.fault = "197m" // red
} else {
// use colored Emojis for better visual distinction
// of log level for Xcode 8
levelColor.verbose = "💜 " // purple
levelColor.debug = "💚 " // green
levelColor.info = "💙 " // blue
levelColor.warning = "💛 " // yellow
levelColor.error = "❤️ " // red
levelColor.critical = "❤️ " // red
levelColor.fault = "❤️ " // red
}
}
}
override public var defaultHashValue: Int { return 1 }
public override init() {
super.init()
levelColor.verbose = "💜 " // purple
levelColor.debug = "💚 " // green
levelColor.info = "💙 " // blue
levelColor.warning = "💛 " // yellow
levelColor.error = "❤️ " // red
levelColor.critical = "❤️ " // red
levelColor.fault = "❤️ " // red
}
// print to Xcode Console. uses full base class functionality
override open func send(_ level: SwiftyBeaver.Level, msg: String, thread: String,
file: String, function: String, line: Int, context: Any? = nil) -> String? {
let formattedString = super.send(level, msg: msg, thread: thread, file: file, function: function, line: line, context: context)
if let message = formattedString {
#if os(Linux)
print(message)
#else
switch logPrintWay {
case let .logger(subsystem, category):
_logger(message: message, level: level, subsystem: subsystem, category: category)
case .nslog:
_nslog(message: message)
case .print:
_print(message: message)
}
#endif
}
return formattedString
}
private func _logger(message: String, level: SwiftyBeaver.Level, subsystem: String, category: String) {
#if canImport(OSLog)
if #available(macOS 11.0, iOS 14.0, watchOS 7.0, tvOS 14.0, *) {
let logger = Logger(subsystem: subsystem, category: category)
switch level {
case .verbose:
logger.trace("\(message)")
case .debug:
logger.debug("\(message)")
case .info:
logger.info("\(message)")
case .warning:
logger.warning("\(message)")
case .error:
logger.error("\(message)")
case .critical:
logger.critical("\(message)")
case .fault:
logger.fault("\(message)")
}
} else {
_print(message: message)
}
#else
_print(message: message)
#endif
}
private func _nslog(message: String) {
NSLog("%@", message)
}
private func _print(message: String) {
print(message)
}
}