Logging

Closes #59. I'm unsure how to actually get to some of the messages to test whether certain parts log correctly. It does correctly log uncaught exceptions and HTTP requests though.
I didn't realize this until now, but in deployment we use deploy.py for this.  Should we move this to a common place and then call logging from both run.py and deploy.py?