web-dev-qa-db-ja.com

Gunicorn-アクセスログなし

現在、デーモンとしてgunicornを使用してsanic(microframework)Webサービスを実行しており、すべてのログをファイルに保存したい(アクセスとエラー)

私の設定:

reload = True
daemon = True
bind = '0.0.0.0:6666'
worker_class = 'sanic.worker.GunicornWorker'
loglevel = 'debug'
accesslog = 'access.log'
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'
errorlog = 'error.log'

次に、Webサービスを開始します。

gunicorn --config config.py app:app

Sooo ..私のエラーログは機能しますが、アクセスログはまったく取得されません。

この問題に関するドキュメントにはヒントがありません。誰か助けていただけますか?

よろしくお願いいたします。

4

あなたは試すことができます:

gunicorn --config config.py app:app --access-logfile '-'

そして、何かがstdout(コンソール出力)にログオンしているかどうかを確認しますか?

9
matt.LLVW

ログ構成をSanicアプリに渡し、sys.stdoutの代わりにファイルをアクセスログハンドラーのストリームとして設定する必要があります。

app = Sanic('test', log_config=CUSTOM_LOGIN_CONFIG)

Sanicフォルダーのlog.pyからデフォルトの構成をコピーできます

accesslog_file = open('accesslog_file.log','w')


CUSTOM_LOGIN_CONFIG = dict(
    version=1,
    disable_existing_loggers=False,

    loggers={
        "root": {
            "level": "INFO",
            "handlers": ["console"]
        },
        "sanic.error": {
            "level": "INFO",
            "handlers": ["error_console"],
            "propagate": True,
            "qualname": "sanic.error"
        },

        "sanic.access": {
            "level": "INFO",
            "handlers": ["access_console"],
            "propagate": True,
            "qualname": "sanic.access"
        }
    },
    handlers={
        "console": {
            "class": "logging.StreamHandler",
            "formatter": "generic",
            "stream": sys.stdout
        },
        "error_console": {
            "class": "logging.StreamHandler",
            "formatter": "generic",
            "stream": sys.stdout
        },
        "access_console": {
            "class": "logging.StreamHandler",
            "formatter": "access",
            "stream": accesslog_file
        },
    },
    formatters={
        "generic": {
            "format": "%(asctime)s [%(process)d] [%(levelname)s] %(message)s",
            "datefmt": "[%Y-%m-%d %H:%M:%S %z]",
            "class": "logging.Formatter"
        },
        "access": {
            "format": "%(asctime)s - (%(name)s)[%(levelname)s][%(Host)s]: " +
                      "%(request)s %(message)s %(status)d %(byte)d",
            "datefmt": "[%Y-%m-%d %H:%M:%S %z]",
            "class": "logging.Formatter"
        },
    }
)

これはアプリをgunicornで実行しても機能します。

0
Pac

単純にサニックフレームワークから直接できると思います。

リンクをチェック

デフォルトのサニックログディレクトリをカスタムディレクトリに変更するには?

0
Jibin Mathew

logging.config.fileConfig('someFile.conf')を使用している場合は、disable_existing_loggers=False引数を使用していることを確認してください。

logging.config.fileConfig('someFile.conf', disable_existing_loggers=False)

ここにドキュメント: https://docs.python.org/3.7/library/logging.config.html#logging.config.fileConfig

それ以外の場合、アクセスログは抑制されます。

既存のロガーを存続させると、たとえばrequestsまたはurllib3ライブラリからの他のログが表示される可能性があります。心配しないでください。必要がなければ、次の行で無効にしてください。

logging.getLogger("urllib3").setLevel(logging.WARNING)
0
Nikita Motornyi

スーパーバイザを使用して、ログパラメータでgunicornサービスを開始します。

[program:sanic]
directory=/home/ubuntu/api
command=/home/ubuntu/api/venv/bin/gunicorn api:app --bind 0.0.0.0:8000 --worker-class sanic.worker.GunicornWorker -w 2
stderr_logfile = log/api_stderr.log
stdout_logfile = log/api_stdout.log

これは私にとっては完璧に機能するので、-f log/api_stderr.logをテールするだけです

0
Christo Goosen