0Pricing
Python Academy · レッスン

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 automatically

extra=による追加コンテキスト

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. logging モジュールの基礎
  2. ハンドラー、フォーマッター、フィルター
  3. 構造化ロギング
  4. pdb によるデバッグ
← Python Academyに戻る