from logging.config import fileConfig from tempfile import NamedTemporaryFile GUNICORN_DEFAULTS = dict( version=1, disable_existing_loggers=False, loggers={ "root": {"level": "INFO", "handlers": ["console"]}, "gunicorn.error": { "level": "INFO", "handlers": ["error_console"], "propagate": True, "qualname": "gunicorn.error" }, "gunicorn.access": { "level": "INFO", "handlers": ["console"], "propagate": True, "qualname": "gunicorn.access" }, }, handlers={ "console": { "class": "logging.StreamHandler", "formatter": "generic", "stream": "sys.stdout" }, "error_console": { "class": "logging.StreamHandler", "formatter": "generic", "stream": "sys.stderr" }, }, formatters={ "generic": { "format": "%(asctime)s [%(process)d] [%(levelname)s] %(message)s", "datefmt": "[%Y-%m-%d %H:%M:%S %z]", "class": "logging.Formatter" }, }, ) INIFILE_CONTENTS = """[formatters] keys=default [formatter_default] format=%(asctime)s:%(levelname)s:%(message)s class=logging.Formatter [handlers] keys=console, error_file [handler_console] class=logging.StreamHandler formatter=default args=tuple() [handler_error_file] class=logging.FileHandler level=ERROR formatter=default args=("error.log", "w") [loggers] keys=root [logger_root] level=DEBUG formatter=default handlers=console,error_file""" with NamedTemporaryFile(mode='w+t', encoding='utf-8') as inifile: inifile.write(INIFILE_CONTENTS) inifile.flush() fileConfig(inifile.name, defaults=GUNICORN_DEFAULTS) print("Hey, it worked!")