Tuesday, 3 March 2020

Redirect All Tornado Logs to stdout and stderr

Tornado by default steals all stdout and stderr to its logging. This is crazy, one can't even do 'print'.

Redirect all back to stdout and stderr:
import logging
import sys

import tornado.log
from tornado.options import options

def setup_logging_to_stream(stream, log_level):
  logger = logging.getLogger()
  channel = logging.StreamHandler(stream)
  channel.setLevel(log_level)
  channel.setFormatter(tornado.log.LogFormatter())
  logger.addHandler(channel)


def setup_logging(log_level=None):
  if log_level is None:
    log_level = getattr(logging, options.logging.upper())

  logger = logging.getLogger()
  logger.setLevel(log_level)

  setup_logging_to_stream(stream=sys.stdout, log_level=log_level)
  setup_logging_to_stream(stream=sys.stderr, log_level=logging.ERROR)

setup_logging();

Reference:
https://gist.github.com/malexer/06fd8f6530a02fddc5feb7c1f2628799

No comments:

Post a Comment