# Logging

Sanicでは、Python logging API (opens new window)に基づいて、さまざまなタイプのロギング(アクセスログ、エラーログ)を要求に対して実行できます。新しい設定を作成する場合は、Pythonロギングに関する基本的な知識が必要です。

# クイックスタート

デフォルト設定を使用する簡単な例を次に示します。

from sanic import Sanic
from sanic.log import logger
from sanic.response import text
app = Sanic('logging_example')
@app.route('/')
async def test(request):
    logger.info('Here is your log')
    return text('Hello World!')
if __name__ == "__main__":
  app.run(debug=True, access_log=True)

サーバーの実行後、次のようなログが表示されます。

[2021-01-04 15:26:26 +0200] [1929659] [INFO] Goin' Fast @ http://127.0.0.1:8000
[2021-01-04 15:26:26 +0200] [1929659] [INFO] Starting worker [1929659]

サーバに要求を送信すると、ログメッセージが出力されます。

[2021-01-04 15:26:28 +0200] [1929659] [INFO] Here is your log
[2021-01-04 15:26:28 +0200] - (sanic.access)[INFO][127.0.0.1:44228]: GET http://localhost:8000/  200 -1

# Sanicのログを変える

独自のロギング設定を使用するには、logging.config.dictConfigを使用するか、Sanicアプリケーションを初期化するときにlog_configを渡します。

app = Sanic('logging_example', log_config=LOGGING_CONFIG)
if __name__ == "__main__":
  app.run(access_log=False)

FYI

Pythonでのロギングは比較的安価な操作です。ただし、多数の要求を処理していて、パフォーマンスが懸念される場合は、アクセスログをログアウトする時間が増え、非常にコストがかかります。

これは、 (nginxのような) プロキシの背後にSanicを置き、そこでアクセスログを取る良い機会です。access_logを無効にすると、全体的なパフォーマンスが大幅に向上します。

最適な運用パフォーマンスを得るには、debugaccess_logを無効にした状態で、app.run(debug=False、access_log=False)でSanicを実行することをお勧めします。

# 構成

Sanicのデフォルトのロギング設定は、sanic.log。LOGGING_CONFIG_DEFAULTSを参照してください。

sanicで使用されるロガーは3つあり、独自のロギング設定を作成する場合は定義する必要があります。

Logger Name Use Case
sanic.root 内部メッセージのログに使用されます。
sanic.error エラーログの記録に使用されます。
sanic.access アクセスログの記録に使用されます。

# ログのフォーマット

Pythonが提供するデフォルトのパラメータ(asctime,levelname,message)に加えて、SanicはAccess Loggerに追加のパラメータを提供します。

Log Context Parameter Parameter Value Datatype
host request.ip str
request request.method + " " + request.url str
status response int
byte len(response.body) int

デフォルトのアクセスログ形式は次のとおりです。

%(asctime)s - (%(name)s)[%(levelname)s][%(host)s]: %(request)s %(message)s %(status)d %(byte)d
MIT Licensed
Copyright © 2018-present Sanic Community Organization

~ Made with ❤️ and ☕️ ~