Skip to content

Instantly share code, notes, and snippets.

@TopherGopher
Created October 24, 2017 14:45

Revisions

  1. TopherGopher revised this gist Oct 24, 2017. No changes.
  2. TopherGopher created this gist Oct 24, 2017.
    31 changes: 31 additions & 0 deletions python_logging.py
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,31 @@
    class CustomJsonFormatter(jsonlogger.JsonFormatter):
    """
    Class that helps redefine the log message format
    """
    def add_fields(self, log_record, record, message_dict):
    super(CustomJsonFormatter, self).add_fields(log_record, record, message_dict)
    if not log_record.get('timestamp'):
    # this doesn't use record.created, so it is slightly off
    now = datetime.utcnow().strftime('%Y-%m-%dT%H:%M:%S.%fZ')
    log_record['timestamp'] = now
    if log_record.get('level'):
    log_record['level'] = log_record['level'].lower()
    else:
    log_record['level'] = record.levelname
    if log_record.get('message') is None:
    log_record.pop('message')

    # Initialize a logger for readable/debuggable STDOUT
    logger = logging.getLogger(__name__)
    FORMAT = "[%(filename)s:%(lineno)s - %(funcName)20s() ] %(message)s"
    logging.basicConfig(format=FORMAT)

    # Add a rotating file handler
    fh = RotatingFileHandler('/var/log/flask.log',
    maxBytes=10000,
    backupCount=1)

    # And have him log in JSON (for consumption by splunk)
    fh.setFormatter(CustomJsonFormatter())
    logger.addHandler(fh)
    logger.setLevel(logging.DEBUG)