Traffine I/O

日本語

2023-03-10

Loguru

Loguruとは

Loguruは、Python向けの強力なログライブラリであり、開発者がアプリケーションの振る舞いを追跡しやすくすることで、ログ処理を簡素化することを目的としています。 直感的で使いやすいインターフェースを提供し、開発者がわずかなコードでロガーを設定してログを開始できるようにします。

Loguruの主要な利点の1つは、柔軟性にあります。 基本的なデバッグや情報メッセージから、より重大な警告やエラーメッセージまで、一連のログレベルを提供しており、開発者はログ出力を特定のニーズに合わせてカスタマイズできます。 また、Loguruは、例外処理、ログファイルのローテーション、複数の宛先へのログ出力など、高度な機能も提供しています。

Loguruは使いやすさでも知られており、APIがシンプルでわかりやすく、直感的なメソッドと明確なドキュメントを提供しています。 開発者は、わずかなコードでロガーを設定し、ログフォーマットをカスタマイズし、ログを開始することができます。

loggingとの比較

Loguruとloggingは、Python向けの2つの人気のあるログライブラリであり、類似した機能を提供していますが、いくつかの重要な違いがあります。 この記事では、Loguruとloggingを比較して、自分のニーズに最適なものを選択するための情報を提供します。

  • 使いやすさ
    Loguruは、シンプルで直感的なAPIを提供することで、使いやすさを追求しています。一方、loggingはより複雑で、設定により多くのコードを必要とする場合があります。

  • カスタマイズ
    Loguruは、カスタマイズの柔軟性が高く、ロギングレベルの範囲からログフォーマットを簡単に設定できます。loggingもカスタマイズ可能ですが、同じ柔軟性を実現するためには、より多くのコードを書く必要があります。

  • 例外処理
    Loguruは、高度な例外処理機能を提供し、例外を簡単にログに記録したり処理することができます。loggingも例外処理が可能ですが、同じ機能を実現するためには、より多くのコードが必要になる場合があります。

  • パフォーマンス
    Loguruは、最小限のオーバーヘッドで高速で効率的なログを記録することで知られています。loggingもパフォーマンスが高いですが、より複雑なアーキテクチャのためにより多くのオーバーヘッドが発生する場合があります。

  • 互換性
    loggingはPython標準ライブラリの一部であるため、全てのPythonインストールでデフォルトで利用可能です。Loguruは標準ライブラリの一部ではないため、インストールして利用することができます。

Loguruのインストール

Loguruをインストールするには、ターミナルまたはコマンドプロンプトを開き、次のコマンドを実行します。

bash
$ pip install loguru

Loguruによる基本的なロギング

この記事では、ロガーの設定、ログレベル、ログレコードフォーマット、ログメッセージの書き込みなどといったLoguruの基本的な使い方を紹介します。

ロガーの設定

Loguruでロガーを設定するには、出力先としてlogger.add()メソッドを呼び出すだけです。例えば、メッセージをコンソールに出力するロガーを設定するには、次のコードを使用できます。

python
from loguru import logger

logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="DEBUG")

このコードは、sys.stderrにメッセージを出力するロガーを設定し、カスタムログレコードフォーマットを使用してタイムスタンプ、ログレベル、ログメッセージを含めます。filterパラメータは、それらを生成したモジュール名によってログメッセージをフィルタリングするために使用できます。levelパラメータは、ログを出力する最小のログレベルを設定します。

ログレベル

Loguruは、ログメッセージを重大度によってカテゴライズするために使用できる複数のログレベルを提供します。利用可能なログレベルは、重度の順にTRACEDEBUGINFOSUCCESSWARNINGERROR、およびCRITICALです。特定のログレベルでメッセージをログに記録するには、単にloggerオブジェクト上で対応するログメソッドを呼び出します。例えば、infoレベルでメッセージをログに記録するには、次のコードを使用できます。

python
logger.info("This is an info message.")

このコードは、INFOレベルでメッセージをログに記録し、ロガーの構成に応じてコンソールまたはファイルに出力されます。

ログレコードフォーマット

Loguruは、各ログメッセージに含まれる情報をカスタマイズできる柔軟なログレコードフォーマットを提供しています。ログレコードフォーマットは、logger.add()メソッドのformatパラメータを使用して指定されます。例えば、各ログメッセージにモジュール名、関数名、および行番号を含めるには、次のログレコードフォーマットを使用できます。

python
logger.add(sys.stderr, format="{time} {level} {module}:{function}:{line} {message}", filter="my_module", level="DEBUG")

このコードは、各ログメッセージを生成したコードのモジュール名、関数名、および行番号を含むカスタムログレコードフォーマットでロガーを設定します。

ログメッセージの書き込み

Loguruでログメッセージを書き込むには、loggerオブジェクトで適切なログメソッドを呼び出すだけです。例えば、デバッグメッセージを書き込むには、次のコードを使用できます。

python
logger.debug("This is a debug message.")

このコードは、デバッグメッセージを、ロガーの設定に応じてコンソールまたはファイルに書き込みます。

Loguruを使った高度なログ技術

例外処理、ログファイルのローテーション、複数の出力先へのログ出力、ログの出力をカスタマイズするなど、Loguruで使用できる高度なログ技術について説明します。

例外処理

Loguruは、コードで例外をログ出力して処理するための高度な例外処理機能を提供しています。例外をLoguruでログ出力するには、logger.exception()メソッドを呼び出し、例外オブジェクトを渡すだけです。

python
try:
    # Some code that may raise an exception
except Exception as e:
    logger.exception("An error occurred: {e}")

このコードは、tryブロックで例外が発生した場合、スタックトレースを含むエラーメッセージをログ出力します。

ログファイルのローテーション

Loguruは、大きなログファイルを管理し、大きすぎることを防止するためのログファイルのローテーション機能を提供しています。ログファイルのローテーションを有効にするには、logger.add()メソッドのrotationパラメータを使用します。

python
logger.add("app.log", rotation="500 MB")

このコードは、ログファイルを500メガバイトごとにローテーションするロガーを設定します。

複数の出力先へのログ出力

Loguruでは、同時に複数の出力先にログを出力できます。複数の出力先にログを出力するには、logger.add()メソッドを複数回、出力先を異なるものにして呼び出すだけです。

python
logger.add(sys.stderr, format="{time} {level} {message}", filter="my_module", level="DEBUG")
logger.add("app.log", format="{time} {level} {message}", filter="my_module", level="DEBUG")

このコードは、sys.stderrapp.logの両方にログメッセージを記録するロガーを設定します。

ログの出力をカスタマイズ

Loguruは、ログメッセージの出力をカスタマイズするためのさまざまなオプションを提供しています。これには、カスタムメタデータの追加、条件に基づくメッセージのフィルタリング、ログメッセージにカスタムフォーマットを適用することが含まれます。

python
logger.add("app.log", format="{time} {level} {message} {extra[user]}")
logger.bind(user="Alice").info("This is a log message.")

このコードは、ログメッセージの出力にカスタムメタデータを含むロガーを設定し、その後、userメタデータの値を「Alice」に設定してメッセージをログに記録します。

Loguruの使用におけるベストプラクティス

Loguruを効果的に使用するためには、いくつかのベストプラクティスに従うことが重要です。この記事では、ログメッセージの一貫性、本番環境でのログ出力、ログを使ったデバッグなど、Loguruの使用におけるベストプラクティスを紹介します。

  • ログメッセージの一貫性
    アプリケーション全体でログメッセージの一貫性を維持することが重要です。つまり、同じログメッセージフォーマットとログレベルをコード全体で一貫して使用することです。一貫したログメッセージは、コードの問題を特定したりデバッグしたりするのに役立ち、ログデータを分析したり解釈したりするのも容易になります。

  • 本番環境でのログ出力
    本番環境でログ出力を行う場合、ログがアプリケーションのパフォーマンスやディスクスペースに与える影響に注意する必要があります。本番環境では、INFOWARNINGなどのより控えめなログレベルを使用することを検討します。また、ログファイルのローテーションを行い、ログファイルのサイズを制限して、ディスクスペースが大量に使用されることを防止することも重要です。

  • ログを使ったデバッグ
    Loguruはコードの問題をデバッグするための強力なツールです。ログを使ったデバッグを行う場合は、アプリケーションの動作を追跡するために十分な情報をログ出力することが重要ですが、過剰にログ出力すると扱いづらくなってしまいます。ログメッセージを使用して、アプリケーションのフローを追跡したり、重要な関数の入出力を記録したりすることを検討します。

参考

https://github.com/Delgan/loguru
https://loguru.readthedocs.io/en/stable/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!