Содержание
ведение журнала
預設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)
...