pgjones / hypercorn

Hypercorn is an ASGI and WSGI Server based on Hyper libraries and inspired by Gunicorn.
MIT License
1.17k stars 104 forks source link

Need clear documentation for configuration #214

Open pythonhubdev opened 7 months ago

pythonhubdev commented 7 months ago

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.

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

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.

joshft91 commented 6 months ago

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?

Sakoes commented 1 month ago

Hi, I am also struggling with customizing the logging by using a json format. Have you guys been able to work this out? Are there any example using the --log-config option?