Loggingについて


初めまして。
えーじです。
今までプログラムを学んで終わりだったので、今後はメモ兼解説?としてQiitaを書いていこうと思います。

私は今までエラーがあるかないかを"print"で確認していましたが、loggingの方が綺麗にかけそうだったので勉強してみました。
初めてQiitaを書くので、間違いや書き方があればご指摘お願い致します。
Logging HOWTOを参考に書いています。

Loggingとは?

logging は、あるソフトウェアが実行されているときに起こったイベントを追跡するための手段です。ソフトウェアの開発者は、特定のイベントが発生したことを示す logging の呼び出しをコードに加えます。イベントは、メッセージで記述され、これに変数データ (すなわち、イベントが起こる度に異なるかもしれないデータ) を加えることもできます。イベントには、開発者がそのイベントに定めた重要性も含まれます。重要性は、レベル (level) や 重大度 (severity) とも呼ばれます。
Markdown: Logging HOWTO

イメージとしてはprintよりもログを取ることに特化したもののようですね。
levelやseverityを使いこなせれば、便利そうですね。

サンプルコード

practice_logging.py

import logging

# 1. logger を作成
logger = logging.getLogger(__name__)

# 2. handlersを設定
std_handler = logging.StreamHandler()
file_handler = logging.FileHandler('practice_debug.log')

# 3. levelの設定
std_handler.setLevel(logging.WARNING)
file_handler.setLevel(logging.ERROR)

# 4. formatters の設定
std_format = logging.Formatter("%(name)s - %(levelname)s - %(message)s")
file_format = logging.Formatter("%(asctime)s\t%(levelname)s -- %(processName)s -- %(filename)s:%(lineno)s -- %(message)s")

# 5. Formatterをそれぞれに接続
std_handler.setFormatter(std_format)
file_handler.setFormatter(file_format)

# 6. logger に handler を追加
logger.addHandler(std_handler)
logger.addHandler(file_handler)

# 7. loggerの発生
logger.warning('This is a warning')
logger.error('This is an error')

Loggingの使う手順(上のコードを一つずつ読む。)

  1. loggerという名のLoggingのインスタンスを作成
  2. ハンドラーを準備

    1. StreamHandler() -> コンソールにログを表示
    2. FileHandler(fileName) -> 'fileName'の中にログを表示
    3. etc ...
  3. レベルの設定

    1. DEBUG (おもに問題を診断するときにのみ関心があるような、詳細な情報。)
    2. INFO (想定された通りのことが起こったことの確認。)
    3. WARNING (想定外のことが起こった、または問題が近く起こりそうである)
    4. ERROR (より重大な問題により、ソフトウェアがある機能を実行できないこと。)
    5. CRITICAL (プログラム自体が実行を続けられないことを表す、重大なエラー。)

    もしDEBUGを選ぶとそれより上のレベルは全て表示される。(defaultはWARNING)

  4. 表示の仕方を設定する(Formatter)

    1. %(name)s : ロギングに使われたロガーの名前
    2. %(levelname)s : DEBUG, INFO, WARNING, ERROR, CRITICAL
    3. %(message)s : パラメータからのメッセージ
    4. %(asctime)s : LogRecord が生成された時刻を人間が読める書式で表したもの。
  5. それぞれのハンドラーにFormatterをセット

  6. 最初のインスタンス(logger)にaddする。

  7. テストとしてログを発生。

初めてのQiitaでした。
あまり綺麗にまとめられませんでした
他の人の記事を見ながらもっと勉強しようと思います!
そしてLoggingをもっと使いこなして、開発者として一歩近付きたいですね