Глубокое погружение в Gunicorn


ведение журнала

預設logging處理機制

  • root
    • уровень INFO
    • 送至 stdout
  • gunicorn.error
    • уровень INFO
    • 處理 журнал ошибок
    • 送至 stderr
    • журнал 會接續送給 родительский регистратор 的 обработчик
  • gunicorn.access
    • уровень INFO
    • 處理 журнал доступа
    • 送至 stdout
    • журнал 會接續送給 родительский регистратор 的 обработчик

ПРИМЕЧАНИЕ: 因為gunicorn預設propate=True,所以console會看到重複2筆log records的現象(root + gunicorn)

https://github.com/benoitc/gunicorn/blob/20.1.0/gunicorn/glogging.py#L48

CONFIG_DEFAULTS = dict(
        version=1,
        disable_existing_loggers=False,

        root={"level": "INFO", "handlers": ["console"]},
        loggers={
            "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": "ext://sys.stdout"
            },
            "error_console": {
                "class": "logging.StreamHandler",
                "formatter": "generic",
                "stream": "ext://sys.stderr"
            },
        },
        formatters={
            "generic": {
                "format": "%(asctime)s [%(process)d] [%(levelname)s] %(message)s",
                "datefmt": "[%Y-%m-%d %H:%M:%S %z]",
                "class": "logging.Formatter"
            }
        }
)
Вход в полноэкранный режим Выход из полноэкранного режима

loglevel改動範圍

Gunicorn提供loglevel參數可調整預設的loglevel,但是內部如何實現?

影響範圍:

  • 不修改 root logger
  • 修改 журнал ошибок 的loglevel
  • журнал доступа 仍維持 уровень INFO

https://github.com/benoitc/gunicorn/blob/20.1.0/gunicorn/glogging.py#L197

def setup(self, cfg):
    self.loglevel = self.LOG_LEVELS.get(cfg.loglevel.lower(), logging.INFO)
    self.error_log.setLevel(self.loglevel)
    self.access_log.setLevel(logging.INFO)
...
Вход в полноэкранный режим Выход из полноэкранного режима

Оцените статью
devanswers.ru
Добавить комментарий