logging モジュールの基礎
ロガーを設定し、レベルを指定して、適切にメッセージを出力します。
「logging モジュールの基礎」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。
printよりloggingを使う理由
loggingモジュールは、重大度レベル、設定可能な出力先、タイムスタンプを提供します。また、コードを変更せずに出力を抑制できます。
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("debug message")
logging.info("info message")
logging.warning("warning message")
logging.error("error message")
logging.critical("critical message")ログレベル
Pythonには、重大度が高くなる順にDEBUG、INFO、WARNING、ERROR、CRITICALという5つの標準レベルがあります。設定されたレベル以上のメッセージだけが出力されます。
import logging
# Numeric values:
# DEBUG = 10
# INFO = 20
# WARNING = 30
# ERROR = 40
# CRITICAL = 50
logging.basicConfig(level=logging.WARNING)
logging.debug("hidden") # not shown
logging.warning("shown") # shownロガーの取得
各モジュールでlogging.getLogger(__name__)を使います。これにより、モジュール構造に対応した階層が作成されます。
import logging
logger = logging.getLogger(__name__)
def process(data):
logger.info("Processing %d items", len(data))
return [x * 2 for x in data]basicConfigのオプション
basicConfigを使うと、ルートロガーをすばやく設定できます。よく使うキーワード引数は、level、format、filename、filemodeです。
import logging
logging.basicConfig(
level=logging.DEBUG,
format="%(asctime)s %(levelname)s %(name)s — %(message)s",
datefmt="%Y-%m-%d %H:%M:%S",
)ログ形式のフィールド
主な形式フィールドは、%(levelname)s、%(name)s、%(message)s、%(asctime)s、%(filename)s、%(lineno)dです。
import logging
fmt = "%(asctime)s | %(levelname)-8s | %(name)s:%(lineno)d | %(message)s"
logging.basicConfig(level=logging.DEBUG, format=fmt)
logging.info("Server started on port 8080")例外のロギング
exceptブロック内でlogger.exception()を使うと、メッセージと完全なトレースバックを記録できます。
import logging
logger = logging.getLogger(__name__)
try:
1 / 0
except ZeroDivisionError:
logger.exception("Division failed")
# Logs message + traceback automaticallyextra=による追加コンテキスト
extra=に辞書を渡すと、ログレコードにカスタムフィールドを追加できます。
import logging
logger = logging.getLogger(__name__)
logging.basicConfig(
format="%(asctime)s %(levelname)s [%(user)s] %(message)s"
)
logger.info("Login successful", extra={"user": "alice"})遅延文字列フォーマット
フォーマット引数は別々に渡し、文字列を事前にフォーマットしないでください。これにより、メッセージがフィルタリングされた場合の文字列生成コストを避けられます。
import logging
logger = logging.getLogger(__name__)
# BAD (always builds the string):
logger.debug(f"Processing {len(data)} items")
# GOOD (only builds if DEBUG is enabled):
logger.debug("Processing %d items", len(data))ロギングの無効化
logging.disable(level)を呼び出すと、そのレベル以下のすべてのメッセージをグローバルに抑制できます。テストで役立ちます。
import logging
logging.disable(logging.CRITICAL) # suppress everything
# All log calls now silently do nothing
logging.disable(logging.NOTSET) # re-enableロガーの階層
ロガー名はドットを区切り文字として使用します。propagate=Falseでない限り、子ロガーは親ロガーに伝播します。
import logging
parent = logging.getLogger("myapp")
child = logging.getLogger("myapp.database")
# child propagates to parent by default
child.warning("DB slow") # also appears in myapp's handlersルートロガー
ルートロガー(logging.warning()などから使われるもの)は、すべてのロガーの祖先です。basicConfigで設定するか、ハンドラーを直接追加して設定します。
import logging
root = logging.getLogger() # root logger
root.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
root.addHandler(handler)クイックチェック
exceptブロック内で、完全なトレースバックを自動的に含めるにはどのロギングメソッドを使いますか。
まとめ
getLogger(__name__)で名前付きロガーを使い、basicConfigで設定し、フォーマット引数を遅延評価で渡し、エラーのトレースバックにはlogger.exception()を使います。ロガーはルートロガーを頂点とする階層を形成します。
よくある質問
「logging モジュールの基礎」レッスンは無料ですか?
はい。「logging モジュールの基礎」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。
「logging モジュールの基礎」で何を学びますか?
ロガーを設定し、レベルを指定して、適切にメッセージを出力します。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Python Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「logging モジュールの基礎」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPython Academyレッスンでコードを書いて実行できますか?
はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- logging モジュールの基礎
- ハンドラー、フォーマッター、フィルター
- 構造化ロギング
- pdb によるデバッグ