-
-
Save virtuald/65eed85ac579000eec14a40f41f47287 to your computer and use it in GitHub Desktop.
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
# Add this to the top of the file where logging is initialized | |
import logging | |
import pprint | |
log_datefmt = "%H:%M:%S" | |
log_format = "%(asctime)s:%(msecs)03d %(levelname)-8s: %(name)-20s: %(message)s" | |
def configure_logging(verbose): | |
formatter = VerboseExceptionFormatter(fmt=log_format, | |
datefmt=log_datefmt) | |
# console logging | |
handler = logging.StreamHandler() | |
handler.setFormatter(formatter) | |
logging.root.addHandler(handler) | |
logging.root.setLevel(logging.DEBUG if verbose else logging.INFO) | |
MAX_VARS_LINES = 30 | |
MAX_LINE_LENGTH = 100 | |
class VerboseExceptionFormatter(logging.Formatter): | |
''' | |
Taken from http://word.bitly.com/post/69080588278/logging-locals | |
''' | |
def __init__(self, log_locals_on_exception=True, *args, **kwargs): | |
self._log_locals = log_locals_on_exception | |
super(VerboseExceptionFormatter, self).__init__(*args, **kwargs) | |
def formatException(self, exc_info): | |
# First get the original formatted exception. | |
exc_text = super(VerboseExceptionFormatter, self).formatException(exc_info) | |
if not self._log_locals: | |
return exc_text | |
# Now we're going to format and add the locals information. | |
output_lines = [exc_text, '\n'] | |
tb = exc_info[2] # This is the outermost frame of the traceback. | |
while tb.tb_next: | |
tb = tb.tb_next # Zoom to the innermost frame. | |
output_lines.append('Locals at innermost frame:\n') | |
locals_text = pprint.pformat(tb.tb_frame.f_locals, indent=2) | |
locals_lines = locals_text.split('\n') | |
if len(locals_lines) > MAX_VARS_LINES: | |
locals_lines = locals_lines[:MAX_VARS_LINES] | |
locals_lines[-1] = '...' | |
output_lines.extend( | |
line[:MAX_LINE_LENGTH - 3] + '...' if len(line) > MAX_LINE_LENGTH else line | |
for line in locals_lines) | |
output_lines.append('\n') | |
return '\n'.join(output_lines) | |
configure_logging(True) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment