On Thu, Jun 13, 2013 at 5:14 PM, Glyph firstname.lastname@example.org wrote:
Hello everybody. Today I'd like to talk about everyone's favorite subsystem within Twisted: logging.
There are a number of problems with Twisted's logging system.
I really need to get out of here and go to dinner, but I really quickly wanted to start a list of use cases for logging.
1. "I need to convey a message with complex information to the user of my software" Log files usually aren't good at all for this, but they're unfortunately used quite often for it. This is pretty much the only reason to have English in your log statements, I think.
2. "I want to be able to analyze patterns in the execution of this software" This is where structured data really helps. Keys, values, "systems", and "events" (as I described below) -- things you can filter by, graph, or redirect.
3. "I want to investigate certain events that happened in the execution of this software" Structured data helps just as much here as with #2. It's nice to be able to interactively query databases of logs. "show me all the stuff about this player". "show me everything that happened in this thread". "show me all of the 'frag' events."
4. "I want to accumulate a bunch of extremely verbose data to be logged only if it's really necessary, such as in an error case" This is similar to #3, but there are cases where you have such verbose data that you don't want to to log it all the time. This is basically the OOPS system as some developers are familiar with -- the execution of request-handling can attach data to the request (or some log context object, or whatever) and if the request ever fails, all of that data will be zipped up and saved somewhere for further investigation. If the request succeeds, it'll be thrown out.
5. "I want to be able to track down where this log message came from" the "event" attribute that I described is helpful here, but having the filename and line number is even better.
I tried to write a number #6 about including framework-provided data in your application-level log statements (like request ID, client IP, URL etc), but I got too hungry.
Sorry for the braindump!