pgjones / hypercorn

Hypercorn is an ASGI and WSGI Server based on Hyper libraries and inspired by Gunicorn.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Need clear documentation for configuration

pythonhubdev opened this issue · comments

Hi, I have started using hypercorn very recently to move away from uvicorn or gunicorn there are certain issues I'm facing while trying to configure it through either a TOML file or a python module.

  • use_reloader was not working when I was trying to use it through python code and serve it
from hypercorn.config import Config as HypercornConfig

class HypercornApplication:
    """
    Custom Hypercorn application.

    This class is used to start Hypercorn with the FastAPI application.
    """

    def __init__(
        self,
        app: FastAPI,
        host: str = settings.host,
        port: int = settings.port,
        workers: int = settings.workers_count,
        reload: bool = settings.reload,
        **kwargs: Any,
    ) -> None:
        self.app = app
        self.host = host
        self.port = port
        self.workers = workers
        self.reload = reload
        self.kwargs = kwargs

    def create_config(self) -> HypercornConfig:
        """
        Create and return a Hypercorn configuration object.
        """
        config = HypercornConfig()
        config.bind = [f"{self.host}:{self.port}"]
        config.workers = self.workers
        config.use_reloader = self.reload
        config.loglevel = logging.getLevelName(logging.ERROR)
        config.accesslog = "-"

        # Additional configuration options can be set here
        for key, value in self.kwargs.items():
            setattr(config, key, value)
        return config

    def run(self) -> None:
        """
        Run the FastAPI application with Hypercorn.
        """
        config = self.create_config()
        logger.info(f"Starting Hypercorn on {self.host}:{self.port}")
        asyncio.run(serve(self.app, config))  # type: ignore
  • The second issue was with logging I couldn't configure the hypercorn log either with a custom logger class or with the config. Nothing worked for me other than the config.loglevel this is the only config that worked for me for the logs. When I tried to configure with TOML file even the loglevel was not getting affected.

Can you provide an example at least one TOML based configuration file and one python file to customise the logger. This will be very useful.

The second issue was with logging I couldn't configure the hypercorn log either with a custom logger class or with the config

This is what I'm struggling with right now. I can't seem to find any documentation or examples that outline the proper way to pass a custom logger class. All I'd like to do is change the formatting: https://github.com/pgjones/hypercorn/blob/main/src/hypercorn/logging.py#L41

Is there an easier way to change the default log formatting?