Skip to content

Instantly share code, notes, and snippets.

@prashant-shahi
Created February 6, 2019 09:57
Show Gist options
  • Select an option

  • Save prashant-shahi/e6fbbf0a30e71c69ba45c3145c4aaf28 to your computer and use it in GitHub Desktop.

Select an option

Save prashant-shahi/e6fbbf0a30e71c69ba45c3145c4aaf28 to your computer and use it in GitHub Desktop.
JSON style logging of stdout/stderr of a Python application for Fluentd
import logging
import sys
from pythonjsonlogger import jsonlogger
class StackdriverJsonFormatter(jsonlogger.JsonFormatter, object):
def __init__(self, fmt="%(asctime) %(levelname) %(message)", style='%', *args, **kwargs):
jsonlogger.JsonFormatter.__init__(self, fmt=fmt, *args, **kwargs)
def process_log_record(self, log_record):
log_record['timestamp'] = log_record['asctime']
log_record['severity'] = log_record['levelname']
del log_record['asctime']
del log_record['levelname']
return super(StackdriverJsonFormatter, self).process_log_record(log_record)
handler = logging.StreamHandler(sys.stdout)
error_handler = logging.StreamHandler(sys.stderr)
formatter = StackdriverJsonFormatter()
handler.setFormatter(formatter)
root_logger = logging.getLogger() # By default, WARNING
root_logger.addHandler(handler)
root_logger.addHandler(error_handler)
root_logger.setLevel(logging.DEBUG)
def main():
root_logger.info('Hi, here\'s some info') # '{"message": "Hi, here's some info"}'
root_logger.debug('a debug message') # -> STDOUT
root_logger.info('this is some info') # -> STDOUT
root_logger.warn('be careful!') # -> STDOUT
root_logger.error('oh no') # -> STDERR
root_logger.critical('big time oh no') # -> STDERR
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment