使用swiftlogging方法签名

我想重写我的日志类,我想知道如何replacePRETTY_FUNCTION或NSStringFromSelector(_cmd)在一个SWIFT文件,以追踪方法调用?

看看我刚发布的一个新库: https : //github.com/DaveWoodCom/XCGLogger

这是一个Swift的debugging日志库。

能够使用# #functionmacros的关键是将它们设置为日志loggingfunction的默认值。 编译器将使用期望的值填充它们。

 func log(logMessage: String, functionName: String = #function) { print("\(functionName): \(logMessage)") } 

然后,只需拨打:

 log("my message") 

它按预期的方式工作,给你如下的东西:

 whateverFunction(): my message 

有关如何工作的更多信息: http : //www.cerebralgardens.com/blog/entry/2014/06/09/the-first-essential-swift-3rd-party-library-to-include-in-your-project

快速特别的文字如下(从[快速指南]

#file string它出现的文件的名称。

#line Int显示的行号。

#column Int开始的列号。

#function string它出现的声明的名字。


在Swift 2.2b4之前 ,这些是

https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/Expressions.html )):

__FILE__ string它出现的文件的名称。

__LINE__ Int显示的行号。

__COLUMN__ Int它开始的列号。

__FUNCTION__ string它出现的声明的名称。

你可以在日志语句中使用这些:

println("error occurred on line \(__LINE__) in function \(__FUNCTION__)")

我会使用这样的东西:

 func Log(message: String = "", _ path: String = __FILE__, _ function: String = __FUNCTION__) { let file = path.componentsSeparatedByString("/").last!.componentsSeparatedByString(".").first! // Sorry NSLog("\(file).\(function): \(message)") } 

与以前的答案相比有所改进:

  • 使用NSLog,而不是print / println
  • 不使用string不可用的lastPathComponent
  • 日志消息是可选的

尝试这个:

 class Log { class func msg(message: String, functionName: String = __FUNCTION__, fileNameWithPath: String = __FILE__, lineNumber: Int = __LINE__ ) { // In the default arguments to this function: // 1) If I use a String type, the macros (eg, __LINE__) don't expand at run time. // "\(__FUNCTION__)\(__FILE__)\(__LINE__)" // 2) A tuple type, like, // typealias SMLogFuncDetails = (String, String, Int) // SMLogFuncDetails = (__FUNCTION__, __FILE__, __LINE__) // doesn't work either. // 3) This String = __FUNCTION__ + __FILE__ // also doesn't work. var fileNameWithoutPath = fileNameWithPath.lastPathComponent #if DEBUG let output = "\(NSDate()): \(message) [\(functionName) in \(fileNameWithoutPath), line \(lineNumber)]" println(output) #endif } } 

logging使用:

 let x = 100 Log.msg("My output message \(x)") 

这是我用在: https : //github.com/goktugyil/QorumLogs
它像XCGLogger,但更好。

 func myLog<T>(object: T, _ file: String = __FILE__, _ function: String = __FUNCTION__, _ line: Int = __LINE__) { let info = "\(file).\(function)[\(line)]:\(object)" print(info) } 

对于Swift 3及以上版本:

 print("\(#function)") 

从Swift 2.2开始,您可以使用Literal Expressions来指定它,如Swift编程语言指南中所述 。

所以,如果你有一个Logger结构,有一个函数logging错误发生的地方,那么你可以这样调用它:

Logger().log(message, fileName: #file, functionName: #function, atLine: #line)

这将一举拿下你的课程和function名称:

 var name = NSStringFromClass(self.classForCoder) + "." + __FUNCTION__ 

这将只在debugging模式下打印:

 func debugLog(text: String, fileName: String = __FILE__, function: String = __FUNCTION__, line: Int = __LINE__) { debugPrint("[\((fileName as NSString).lastPathComponent), in \(function)() at line: \(line)]: \(text)") } 

结果:

 "[Book.swift, in addPage() at line: 33]: Page added with success" 

Swift 3支持带date,函数名,文件名,行号的debugLog对象:

 public func debugLog(object: Any, functionName: String = #function, fileName: String = #file, lineNumber: Int = #line) { let className = (fileName as NSString).lastPathComponent print("\(NSDate()): <\(className)> \(functionName) [#\(lineNumber)]| \(object)\n") } 

有一个我已经出版的新图书馆: 打印机

它有许多function让你login不同的方式。

要logging成功消息:

 Printer.log.success(details: "This is a Success message.") 

输出:

 Printer ➞ [✅ Success] [⌚04-27-2017 10:53:28] ➞ ✹✹This is a Success message.✹✹ [Trace] ➞ ViewController.swift ➞ viewDidLoad() #58 

免责声明 :这个图书馆是由我创build的。

这似乎在迅速3.1工作正常

 print("File: \((#file as NSString).lastPathComponent) Func: \(#function) Line: \(#line)") 

这是我的承诺。

 func Log<T>(_ object: Shit, _ file: String = #file, _ function: String = #function, _ line: Int = #line) { var filename = (file as NSString).lastPathComponent filename = filename.components(separatedBy: ".")[0] let currentDate = Date() let df = DateFormatter() df.dateFormat = "HH:mm:ss.SSS" print("┌──────────────┬───────────────────────────────────────────────────────────────") print("│ \(df.string(from: currentDate)) │ \(filename).\(function) (\(line))") print("└──────────────┴───────────────────────────────────────────────────────────────") print(" \(object)\n")} 

希望你喜欢。

在这里输入图像说明

 func Log<T>(_ object: T, fileName: String = #file, function: String = #function, line: Int = #line) { NSLog("\((fileName as NSString).lastPathComponent), in \(function) at line: \(line): \(object)") }