直接贴代码了,可以支持多参数,在别人基础上进行修改
public func Fprint(_ items: Any...,
separator: String = " ",
terminator: String = "\n",
_ file:String = #file,
_ function:String = #function,
_ line:Int = #line){
var longStr:String = ""
for value in items{
var stringRepresentation:String = ""
if let value = value as? CustomStringConvertible{
stringRepresentation = value.description
}else if let value = value as? CustomDebugStringConvertible{
stringRepresentation = value.debugDescription
}else if let value = value as? LosslessStringConvertible{
stringRepresentation = value.description
} else{
// fatalError("glog only work for values that conform to CustomStringConvertible or CustomDebugStringConvertible")
// print(objct)
}
longStr = longStr + "," + stringRepresentation
}
let gFormatter = DateFormatter()
gFormatter.dateFormat = "HH:mm:ss:SSS"
let timeStamp = gFormatter.string(from: Date())
let queue = Thread.isMainThread ? "UI":"BG"
let fileUrl = NSURL(string: file)?.lastPathComponent ?? "Unknown file"
if longStr.count > items.count{
print("FM \(timeStamp) {\(queue)} \(fileUrl) > \(function)[\(line)]: \(longStr)")
}else{
print("FM \(timeStamp) {\(queue)} \(fileUrl) > \(function)[\(line)]: \(items)")
}
}
后面又更改了一个版本,打印点花花绿绿的东西更醒目
import os
import Foundation
public enum LogLevel{
case log
case fault
case error
case warn
case verbose
case info
case debug
}
public func mprint(level:LogLevel? = .debug,
_ items: Any...,
separator: String = " ",
terminator: String = "\n",
_ file:String = #file,
_ function:String = #function,
_ line:Int = #line){
#if DEBUG
var longStr:String = ""
for value in items{
var stringRepresentation:String = ""
if let value = value as? CustomStringConvertible{
stringRepresentation = value.description
}else if let value = value as? CustomDebugStringConvertible{
stringRepresentation = value.debugDescription
}else if let value = value as? LosslessStringConvertible{
stringRepresentation = value.description
} else{
// fatalError("glog only work for values that conform to CustomStringConvertible or CustomDebugStringConvertible")
// print(objct)
}
longStr = longStr + "," + stringRepresentation
}
let gFormatter = DateFormatter()
gFormatter.dateFormat = "HH:mm:ss:SSS"
let timeStamp = gFormatter.string(from: Date())
let queue = Thread.isMainThread ? "UI":"BG"
let fileUrl = NSURL(string: file)?.lastPathComponent ?? "Unknown file"
var resultLog = ""
if longStr.count > items.count{
resultLog = "M \(timeStamp) {\(queue)} \(fileUrl) > \(function)[\(line)]: \(longStr)"
}else{
resultLog = "M \(timeStamp) {\(queue)} \(fileUrl) > \(function)[\(line)]:\(items)"
}
let subsystem:String = Bundle.main.bundleIdentifier ?? ""
let logger = Logger(subsystem: subsystem, category: "")
switch level {
case .log:
logger.log("🤍 \(resultLog)")
case .debug:
//🧡
logger.debug("💚 \(resultLog)")
case .info:
logger.info("💙 \(resultLog)")
case .verbose:
logger.warning("💜 \(resultLog)")
case .warn:
logger.notice("💛 \(resultLog)")
case .error:
logger.error("❌ \(resultLog)")
case .fault:
logger.fault("💔 \(resultLog)")
case nil:
logger.debug("💚 \(resultLog)")
}
#else
// print("")
#endif
}