Instantly share code, notes, and snippets.

@kdgregory /logging_example.py Secret
Last active Jul 27, 2018

Embed
What would you like to do?
Example of generating JSON logging output from Python
import json
import logging
import platform
import sys
import time
import traceback
class JSONFormatter:
"""A formatter for the standard logging module that converts a LogRecord into JSON
Output matches JSONLayout from https://github.com/kdgregory/log4j-aws-appenders. Any
keyword arguments supplied to the constructor are output in a "tags" sub-object.
"""
def __init__(self, **tags):
self.tags = tags
def format(self, record):
result = {
'timestamp': time.strftime("%Y-%m-%dT%H:%M:%S", time.gmtime(record.created)) +
(".%03dZ" % (1000 * (record.created % 1))),
'level': record.levelname,
'logger': record.name,
'message': record.msg % record.args,
'hostname': platform.node(),
'processId': record.process,
'thread': record.threadName,
'locationInfo': {
'fileName': record.filename,
'lineNumber': record.lineno
}
}
if self.tags:
result['tags'] = self.tags
if (record.exc_info):
result['exception'] = traceback.format_exception(record.exc_info[0], record.exc_info[1], record.exc_info[2])
return json.dumps(result)
def configure_logging():
handler = logging.StreamHandler(sys.stderr)
handler.setFormatter(JSONFormatter(application="example"))
logging.basicConfig(level=logging.DEBUG, handlers=[handler])
if __name__ == '__main__':
configure_logging()
logger = logging.getLogger(__name__)
logger.info('Started')
logger.debug('this is a test of %s %s', "value", "substitutions")
try:
raise Exception("example")
except Exception as ex:
logger.exception("caught exception")
logger.info('Finished')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment