Created
February 6, 2019 09:57
-
-
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
This file contains hidden or 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
| 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