コンテンツにスキップ

12月27日(金)正午12時入金分まで年内出荷いたします。それを過ぎると1月6日(月)以降の出荷となりますのでご注意ください。
また年始は数日の間当日出荷ができない可能性がございます。詳細につきましてはこちらの記事をご確認ください。

12月27日(金)正午12時入金分まで年内出荷いたします。それを過ぎると1月6日(月)以降の出荷となりますのでご注意ください。また年始は数日の間当日出荷ができない可能性がございます。

詳細につきましてはこちらの記事をご確認ください。

gunicornのworker-classにuvicornを指定するときに、uvicornのlog-configを指定したい

gunicornのworker-classにuvicornを指定するときに、uvicornのlog-configを指定したい

こんにちは。
ECシステム開発チームのいまづです。

uvicornの設定情報をどうやって渡すのかでちょっと困った話です。

gunicornじゃなくて、uvicornの log-config を指定したいんだが

ちょっとしたAPIサーバーをFastAPIを使って書いてみているのですが、デプロイするのにDockerfileとかを書き出したら、ログ出力が思ったようにできていなくて困りました。

uvicornで動かすと、loggingを使ったログ出力が出ないよーという話は検索すると色々出てくるので、それらを参考にログの設定ファイルを書いて uvicorn ... --log-config uvicorn-log-config.yaml などしてログが出力されるようにはなったけど、じゃあgunicornのworkerとしてuvicornを指定したいときはどうするんだ、となるとドキュメントにも書かれていない様子(見つけられていないだけ?)。

gunicornの--log-config を指定しても、それはgunicornの設定であってworker-class側の指定じゃないですしね。

設定じゃなくて自前のクラスで指定する

https://github.com/encode/uvicorn/blob/7d274ed3894b8e16fcbdc69a6456f8ca12b33711/uvicorn/workers.py#L20
UvicornWorker クラスを見ると、クラスに指定した CONFIG_KWARGS の内容で config_kwargs を上書きしていますね。

workerクラスを定義して、それを指定して実行するようにするしかないのかな。

python
class MyWorker(UvicornWorker):
    CONFIG_KWARGS = {
        "log_config": os.getenv('LOG_CONFIG'),
    }

(環境変数 LOG_CONFIG に作成したログの設定ファイル uvicorn-log-config.yaml のパスを設定しておく前提)

shell
gunicorn docsdb.api_main:app --workers 4 --worker-class myapp.MyWorker --bind 0.0.0.0:8000

これで思ったようにログが出力されるようになりました。:D

 

 

 


 

システムエンジニア募集中です!

興味のある方はぜひカジュアル面談へ!お待ちしています。

前の記事 【セール】2024年スポットセール第二弾!DDT & myActuator ロボット系モーター!【スイッチサイエンス】