-
-
Save tmaes/e70163d8c7fb4e941fe2c9283029e31f to your computer and use it in GitHub Desktop.
Debug logging for Swift
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// LoggingPrint.swift | |
// | |
import Foundation | |
/** | |
Prints the filename, function name, line number and textual representation of `object` and a newline character into | |
the standard output if the build setting for "Active Complilation Conditions" (SWIFT_ACTIVE_COMPILATION_CONDITIONS) defines `DEBUG`. | |
The current thread is a prefix on the output. <UI> for the main thread, <BG> for anything else. | |
Only the first parameter needs to be passed to this funtion. | |
The textual representation is obtained from the `object` using `String(reflecting:)` which works for _any_ type. | |
To provide a custom format for the output make your object conform to `CustomDebugStringConvertible` and provide your format in | |
the `debugDescription` parameter. | |
:param: object The object whose textual representation will be printed. If this is an expression, it is lazily evaluated. | |
:param: file The name of the file, defaults to the current file without the ".swift" extension. | |
:param: function The name of the function, defaults to the function within which the call is made. | |
:param: line The line number, defaults to the line number within the file that the call is made. | |
*/ | |
func loggingPrint<T>(_ object: @autoclosure () -> T, _ file: String = #file, _ function: String = #function, _ line: Int = #line) { | |
#if DEBUG | |
let value = object() | |
let fileURL = NSURL(string: file)?.lastPathComponent ?? "Unknown file" | |
let queue = Thread.isMainThread ? "UI" : "BG" | |
print("<\(queue)> \(fileURL) \(function)[\(line)]: " + String(reflecting: value)) | |
#endif | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment