- Colors.
- Multiple channels.
- Logging anywhere else other than standard output.
- File rotation.
- Complicated filters.
- Helper functions that save me from typing 10 extra characters.
- Verbosity.
- Levels.
- Formatters.
- Thread safety.
- Appenders.
- XML anything.
- Document Object Model hierarchies.
- Targets.
- Layouts.
I don't even need date and time information. That line prefix that NSLog kicks out? Too long! You know what I like column 1 of my log files to contain? The first character of my log message.
So just use print(), right? Well, the problem is, I throw all those print statements around, but I'm only debugging 1 or 2 entities at a time, and I don't want to look at all those print statements from 2 weeks ago confusing me while I debug something now.
So the only feature I need is categories. I specify a category when I write the call to my logging function along with a message. Somewhere central, I can turn on or off what categories get logged.
So my requirements are:
- Print the message I pass in.
- Unless I don't want that message printed right now.
So anyway, here is my fancy logging library.
struct L { // These are the only categories that will be logged. Adjust accordingly. private static let categories = ["Pilot"] typealias M = ((String) -> Void) static let c:[String : M] = { var tmp = [String : M]() for s in L.categories { tmp[s] = L.m } return tmp }() static func m(message:String) { print(message) } }
And here is how you use it.
class Pilot { private let n = String(Pilot) .... L.c[n]?("radians = \(radians)") .... L.c["Err"]?("state was never set!") } class Location { private let c = String(Location) .... L.c[c]?("directionToLocation = \(directionToLocation)") }
Because categories only has "Pilot", only the "radians" log line will get printed. I can chose to use the names of classes for the category or any string I want.
When I'm ready to push to the App Store, I can leave categories as "Err" to record any errors. As if I'll ever be able to talk a user through pulling and sending me their device console logs.
No comments:
Post a Comment