Python ログフォーマッター

Aditya Raj 2023年1月30日
  1. Python のさまざまなログレベルとは何ですか
  2. Python ログハンドラーとは何ですか
  3. Python Log Formatter とは何ですか
  4. Python ログフォーマッターを作成する手順
  5. まとめ
Python ログフォーマッター

ロギングを使用して、プログラムの実行に関する情報を保存します。ソフトウェアを実行すると、さまざまな警告が発生し、エラーが発生することがあります。ロギングによって保存されたデータは、エラーの原因を特定するのに役立ちます。この記事では、Python でログフォーマッターを使用してログデータを望ましい形式で保存する方法について説明します。

Python のさまざまなログレベルとは何ですか

ログレベルは、ログファイル内の警告またはメッセージの重大度を識別するために使用されます。Python には、criticalerrorwarninginfodebugnotset の 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() メソッドを使用してロガーを定義することもできます。また、criticalerror、および 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 ログハンドラーとは何ですか

メッセージをログファイルに出力するだけでは、エラーに関する情報は得られません。したがって、ログファイルから必要な情報を取得するために、ログメッセージをフォーマットする必要があります。このために、さまざまなログフォーマッターとハンドラーを使用します。

ハンドラーオブジェクトは、ログメッセージを特定の宛先に送信するためのチャネルと考えることができます。FileHandlerStreamHandler オブジェクトなど、さまざまなタイプのハンドラーオブジェクトがあります。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() メソッドは、入力引数として、asctimenamelevelname などのさまざまな属性を含む文字列を取ります。実行後、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
Aditya Raj avatar Aditya Raj avatar

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

関連記事 - Python Logging