Gunicorn 자세히 알아보기

6799 단어 gunicornpython

벌채 반출



預設logging處理機制


  • 루트
  • 정보 수준
  • 기본 표준 출력

  • gunicorn.오류
  • 정보 수준
  • 處理 오류 로그
  • 送至 stderr
  • log 會接續送給 상위 로거의 핸들러

  • gunicorn.액세스
  • 정보 수준
  • 處理 액세스 로그
  • 기본 표준 출력
  • log 會接續送給 상위 로거의 핸들러


  • 참고: 因為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,但是內部如何實現?

    影響範圍:
  • 不修改 루트 로거
  • 修改 오류 로그의 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)
    ...
    

    좋은 웹페이지 즐겨찾기