Python ログフォーマッター
- Python のさまざまなログレベルとは何ですか
- Python ログハンドラーとは何ですか
- Python Log Formatter とは何ですか
- Python ログフォーマッターを作成する手順
- まとめ
ロギングを使用して、プログラムの実行に関する情報を保存します。ソフトウェアを実行すると、さまざまな警告が発生し、エラーが発生することがあります。ロギングによって保存されたデータは、エラーの原因を特定するのに役立ちます。この記事では、Python でログフォーマッターを使用してログデータを望ましい形式で保存する方法について説明します。
Python のさまざまなログレベルとは何ですか
ログレベルは、ログファイル内の警告またはメッセージの重大度を識別するために使用されます。Python には、critical
、error
、warning
、info
、debug
、notset
の 6つのログレベルがあります。critical
レベルはこれらの中で最高の優先度を持ち、notset
レベルは最低の優先度を持ちます。通常、プログラムでログを作成すると、ログは標準出力に出力されます。logging
モジュールの error()
メソッドを使用して、error
ログを出力できます。以下に示すように、error()
メソッドは文字列メッセージを受け取り、それを標準出力に出力します。
import logging
logging.error("This is a sample error message")
出力:
ERROR:root:This is a sample error message
同様に、warning()
メソッドを使用して warning
ログ、debug()
メソッドを使用して debug
ログ、critical()
メソッドを使用して critical
ログ、および info
ログを出力できます。以下に示すように、info()
メソッドを使用します。
import logging
logging.debug("This is a sample debug message")
logging.info("This is a sample info message")
logging.warning("This is a sample warning message")
logging.error("This is a sample error message")
logging.critical("This is a sample critical message")
出力:
WARNING:root:This is a sample warning message
ERROR:root:This is a sample error message
CRITICAL:root:This is a sample critical message
出力では、root
は現在のロガーの名前です。getLogger()
メソッドを使用してロガーを定義することもできます。また、critical
、error
、および warning
ログのみが出力され、debug
および info
ログは出力されないことがわかります。
これは、ログレベルが warning
レベルに設定されているためです。warning
レベルより下のログ、つまり info
および debug
ログは出力されません。これらのログを出力するには、ログレベルを info
に設定する必要があります。このために、logging
モジュールで定義された setLevel()
メソッドを使用します。
setLevel()
メソッドは、logger
オブジェクトで呼び出されます。logger
オブジェクトは、logging
モジュールで定義された getLogger()
メソッドを使用して作成されます。getLogger()
メソッドは入力として文字列を受け取ります。文字列はロガーの名前として割り当てられます。ログレベルを一定のレベルに設定すると、このレベルよりも優先度の高いすべてのログが出力されます。次の例は、それがどのように機能するかを示しています。
import logging
logger = logging.getLogger("myLogger")
logger.setLevel(logging.CRITICAL)
logger.debug("This is a sample debug message")
logger.info("This is a sample info message")
logger.warning("This is a sample warning message")
logger.error("This is a sample error message")
logger.critical("This is a sample critical message")
出力:
This is a sample critical message
ここでは、critical
でログレベルを定義したため、critical
ログのみが出力されます。また、メッセージのみが出力され、ログタイプと root
キーワードは出力されないことがわかります。これは、getLogger()
関数を使用して myLogger
という名前のカスタムロガーを定義したためです。ログタイプとロガー名を出力するには、Python ログフォーマッターを使用する必要があります。
Python ログハンドラーとは何ですか
メッセージをログファイルに出力するだけでは、エラーに関する情報は得られません。したがって、ログファイルから必要な情報を取得するために、ログメッセージをフォーマットする必要があります。このために、さまざまなログフォーマッターとハンドラーを使用します。
ハンドラーオブジェクトは、ログメッセージを特定の宛先に送信するためのチャネルと考えることができます。FileHandler
や StreamHandler
オブジェクトなど、さまざまなタイプのハンドラーオブジェクトがあります。FileHandler
オブジェクトは、FileHandler()
メソッドを使用して作成されます。以下に示すように、入力としてファイル名を受け取り、FileHandler
オブジェクトを返します。
fileHandler = logging.FileHandler("test_file.log")
logger.addHandler(fileHandler)
同様に、StreamHandler
オブジェクトは StreamHandler()
メソッドを使用して作成されます。FileHandler
オブジェクトはログを特定のファイルに転送しますが、StreamHandler
オブジェクトはログを特定のストリームに転送します。StreamHandler()
メソッドに入力引数を渡さない場合、ログは標準の出力ストリームに送られます。以下に示すように、StreamHandler
を作成できます。
streamHandler = logging.StreamHandler()
logger.addHandler(streamHandler)
ハンドラーオブジェクトを作成した後、addHandler()
メソッドを使用してハンドラーをロガーに追加します。addHandler()
メソッドは logger
オブジェクトで呼び出され、入力引数としてハンドラーオブジェクトを取ります。addHandler()
メソッドの実行後、ハンドラーはロガー
に追加されます。
Python Log Formatter とは何ですか
Python のログフォーマッターは、ログの最終的な構造と内容を構成するために使用されます。Python ログフォーマッターを使用すると、%演算子を使用して、ログ名前
、時間
、日付
、重大度
、およびその他の情報をログメッセージとともに含めることができます。
ログの形式を定義するには、Formatter()
メソッドを使用します。Formatter()
メソッドは、入力引数として、asctime
、name
、levelname
などのさまざまな属性を含む文字列を取ります。実行後、Formatter()
メソッドは Formatter
オブジェクトを返します。
formatter = logging.Formatter("%(asctime)s %(name)s %(levelname)s: %(message)s")
ここ、
asctime
属性は、ログレコードが作成された時刻を示します。name
属性は、コールのログ記録に使用されるロガーの名前を示します。levelname
属性は、デバッグ、情報、警告、エラー、クリティカルなどのメッセージのログレベルを示します。他のログ属性について詳しくは、こちらをご覧ください。
Formatter
オブジェクトを作成した後、setFormatter()
メソッドを使用してログのフォーマットを設定します。setFormatter()
メソッドはハンドラーオブジェクトで呼び出されます。StreamHandler
を使用して、プログラムの標準出力にログを出力しました。ハンドラーオブジェクトで呼び出されると、setFormatter()
関数は Formatter
オブジェクトを入力引数として受け取り、ハンドラーでログ形式を設定します。
streamHandler.setFormatter(formatter)
ログメッセージの形式を設定した後、通常どおりにメッセージをログに記録でき、定義された形式で出力ストリームに送信されます。
import logging
logger = logging.getLogger("myLogger")
streamHandler = logging.StreamHandler()
logger.addHandler(streamHandler)
formatter = logging.Formatter("%(asctime)s %(name)s %(levelname)s: %(message)s")
streamHandler.setFormatter(formatter)
logger.debug("This is a sample debug message")
logger.info("This is a sample info message")
logger.warning("This is a sample warning message")
logger.error("This is a sample error message")
logger.critical("This is a sample critical message")
出力:
2021-12-28 02:33:42,933 myLogger WARNING: This is a sample warning message
2021-12-28 02:33:42,933 myLogger ERROR: This is a sample error message
2021-12-28 02:33:42,933 myLogger CRITICAL: This is a sample critical message
ここでは、warning()
メソッドを使用してのみメッセージをログに記録していることがわかります。ログは、Formatter()
メソッドを使用して定義した形式で出力されています。ログの作成日時、ロガーの名前、ログの種類など、ログに関するすべての詳細が含まれています。プロセス全体をチャンクで学習したので、ログ出力をフォーマットするための Python ログフォーマッターを作成するためのステップバイステップのプロセスについて以下で説明しました。
Python ログフォーマッターを作成する手順
-
getLogger()
メソッドを使用してロガーオブジェクトを作成します。 -
FileHandler()
メソッドまたはStreamHandler()
メソッドを使用して、FileHandler
またはStreamHandler
オブジェクトを作成します。 -
addHandler()
メソッドを使用して、FileHandler
またはStreamHandler
オブジェクトをロガーに追加します。 -
Formatter()
メソッドを使用して Python ログフォーマッターを作成します。 -
FileHandler
またはStreamHandler
オブジェクトでsetFormatter()
メソッドを使用してフォーマッターを適用します。
まとめ
この記事では、Python でログがどのように機能するかについて説明しました。Python のハンドラーとログフォーマッターについても説明しました。この記事では、StreamHandler
オブジェクトとログフォーマッターを使用して、フォーマットがどのように機能するかを示しました。ただし、ログを作成するには、常に FileHandler
オブジェクトを使用する必要があります。予期しないことが発生した場合にエラーがないかどうかを調べるために、常にログをファイルに保存する必要があるためです。また、この記事で指定されている他の多くのログ属性を使用して、理解を深めるためにログメッセージをフォーマットできます。
Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.
GitHub