バージョン 0.6.0 で追加.
ログの設定¶
discord.py は、エラーとデバッグ情報を logging
Python モジュールを用いて出力します。このプロセスを容易にするため、ライブラリは Client.run()
を使用したときに discord
ロガーのデフォルト構成を提供します。設定されていないとエラーや警告は一切出力されないため、 logging モジュールを設定することを強く推奨します。
ライブラリが提供するデフォルトの logging 構成は色付きの出力を sys.stderr
に出力します。 logging.FileHandler
などのビルトイン logging.handlers
を使用すると、ファイルに出力するようにできます。
これは、 Client.run()
に渡してください:
import logging
handler = logging.FileHandler(filename='discord.log', encoding='utf-8', mode='w')
# Assume client refers to a discord.Client subclass...
client.run(token, log_handler=handler)
None
を渡して、ライブラリの logging 構成を完全に無効化することもできます。
client.run(token, log_handler=None)
ログレベルを logging.DEBUG
に設定することも可能です:
import logging
handler = logging.FileHandler(filename='discord.log', encoding='utf-8', mode='w')
# Assume client refers to a discord.Client subclass...
client.run(token, log_handler=handler, log_level=logging.DEBUG)
特に、 DEBUG
といった冗長なイベントレベルを設定している場合、プログラムの標準エラー出力をつまらせてしまう原因になるため、ファイルへの出力が推奨されます。
Client.run()
を使用せずにライブラリ提供の構成を使用して logging を設定したい場合は、 discord.utils.setup_logging()
を使用できます。
import discord
discord.utils.setup_logging()
# or, for example
discord.utils.setup_logging(level=logging.INFO, root=False)
logging
モジュールを使用するとより高度なセットアップが行えます。以下の例では、HTTPリクエスト以外のすべてのライブラリの出力に対しDEBUG出力を使用するローテーションを行うファイルハンドラを構成します。
import discord
import logging
import logging.handlers
logger = logging.getLogger('discord')
logger.setLevel(logging.DEBUG)
logging.getLogger('discord.http').setLevel(logging.INFO)
handler = logging.handlers.RotatingFileHandler(
filename='discord.log',
encoding='utf-8',
maxBytes=32 * 1024 * 1024, # 32 MiB
backupCount=5, # Rotate through 5 files
)
dt_fmt = '%Y-%m-%d %H:%M:%S'
formatter = logging.Formatter('[{asctime}] [{levelname:<8}] {name}: {message}', dt_fmt, style='{')
handler.setFormatter(formatter)
logger.addHandler(handler)
# Assume client refers to a discord.Client subclass...
# Suppress the default configuration since we have our own
client.run(token, log_handler=None)
詳細は、logging
モジュールのドキュメントを参照してください。
バージョン 2.0 で変更: ライブラリがデフォルト logging 構成を提供するようになりました。