Pythonの優れたサードパーティ製非同期ログライブラリ ろぐる紹介

I.はじめに

Python コードを作成およびデバッグするプロセスでは、ログを記録する必要がよくあります。通常は、Python に付属する組み込みの標準ライブラリ ロギングを使用しますが、このライブラリを使用すると、設定がさらに面倒になります。この記事では、プログラミング効率を向上させるために、最近発見された貴重なサードパーティ ログ ライブラリ Loguru に焦点を当てます。ライブラリの名前は、ログ マスターを意味するヒンディー語から来ています。

まず、Loguru の優雅さを説明するために直感的な比較をしてみましょう。Python に付属のロギングを使用したサンプル コードは次のとおりです。

20221221220533

出力例は次のとおりです。

20221221220709

Loguru ライブラリを使用したサンプルコードは次のとおりです。

20221221220734

Loguruを使ってログを出力すると、ターミナル実行後に色付きのログが表示され、非常に便利です。

2、loguruをインストールします

pip を使用して直接インストールするだけです。コマンドは次のとおりです。

pip install loguru

以下を使用して端末に出力します。

from loguru import logger
logger.debug("msg msg msg!")

ファイルへの出力の使用法:

from loguru import logger
logger.add("file_name.log")
logger.debug("msg msg msg!")

3. 特徴

Loguru ライブラリの豊富な機能を提供する公式 github を参照してください。説明する重要な機能がいくつかあります。

3.1 すぐに使える状態

Loguruライブラリの設計意図は、唯一無二のロガーを追求することであり、使いやすさを考慮して、あらかじめ出力形式がプリセットされています。ログを印刷する必要がある場合は、次の方法を実行するだけです。

from loguru import logger
logger.debug("That's it, beautiful and simple logging!")

3.2 インポート機能は初期化せずに使用可能

Loguru では、出力スタイルをカスタマイズするにはどうすればよいですか? 出力情報をフィルタリングするにはどうすればよいですか? ログレベルを設定するにはどうすればよいですか?

答えは、add() 関数を呼び出すことです。

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

例は次のとおりです。

from loguru import logger
logger.add("info.log", format="{time} {level} {message}", filter="", level="INFO")
logger.debug("This is a debug msg")
logger.info("This is a info msg")

info.log を確認すると、結果は次のようになります。

20221221221253

3.3 より簡単なファイルロギングとダンプ/保持/圧縮方法

シンプルな設定でログ保存をより使いやすくすることができます。たとえば、古いログを削除したい場合、または保存されたログを自動的に圧縮したい場合は、次のコマンドを参照できます。

logger.add("file_1.log", rotation="500 MB")    # 文件过大(超过500M)就会重新生成一个文件
logger.add("file_2.log", rotation="12:00")     # 每天12点创建新文件
logger.add("file_3.log", rotation="1 week")    # 文件时间过长就会创建新文件
logger.add("file_4.log", retention="10 days")  # 一段时间后会清空
logger.add("file_5.log", compression="zip")    # 保存zip格式

3.4 より洗練された文字列形式の出力

Loguru ライブラリは、文字列の処理においてより強力です。文字列形式の出力では、% を置き換える {} がサポートされています。関数は str.format() に似ています。

logger.info("If you're using Python {}, prefer {feature} of course!", 3.6, feature="f-strings")

3.5 例外はスレッドまたはメインスレッドでキャッチできる

コードがクラッシュすると、ログにエラー情報がまったく表示されないことがよくあります。Loguru ライブラリでは、@logger.catch デコレータを使用して、例外が発生したときにエラー メッセージを確実に保存できます。

例は次のとおりです。

@logger.catch
def main(x, y, z):
    return x * y / z

res = main(1,2,0)
print(res)

20221221221625

3.6 カスタムカラーをサポート可能

Loguru はカスタム カラーをサポートしています。デフォルトのカラーが気に入らない場合は、次のように変更できます。

logger.add(sys.stdout, colorize=True, format="<green>{time}</green> <level>{message}</level>")

3.7 非同期、スレッドおよびマルチプロセスセーフをサポート

Loguru はデフォルトでスレッドセーフですが、マルチプロセスセーフではありません。ただし、マルチプロセス/非同期ロギングが必要な場合は、エンキューパラメータを追加するだけでそれをサポートすることもできます。

logger.add("somefile.log", enqueue=True)

3.8 サポート例外の整合性の説明

ログの場合、エラースタックのないログには魂がありません。Loguru を使用すると、問題 (変数を含む) を特定するのに役立つスタック トレース全体を表示できます。

logger.add("out.log", backtrace=True, diagnose=True)  # Caution, may leak sensitive data in prod

def func(a, b):
    return a / b

def nested(c):
    try:
        func(5, c)
    except ZeroDivisionError:
        logger.exception("What?!")

nested(0)

操作の結果は次のようになります。

20221221222054

3.9 日時処理の改善

次のように日付出力スタイルをカスタマイズできます。

logger.add("file.log", format="{time:YYYY-MM-DD at HH:mm:ss} | {level} | {message}")  #定义日期样式

3.10 サポート電子メール通知

Loguru を強力な通知ライブラリと組み合わせて使用​​すると、プログラムが予期せず失敗したときに電子メールを受信したり、その他の種類の通知を送信したりできます。

import notifiers

params = {
    "username": "[email protected]",
    "password": "abc123",
    "to": "[email protected]"
}

# 初始化时发送一封邮件
notifier = notifiers.get_notifier("gmail")
notifier.notify(message="The application is running!", **params)

# 发生Error时,发邮件进行告警
from notifiers.logging import NotificationHandler

handler = NotificationHandler("gmail", defaults=params)
logger.add(handler, level="ERROR")

この設定後は、エラー ログが生成されるたびに、プログラムがメールボックスに通知メールを自動的に送信するようになります。これは非常に使いやすいものです。

4. まとめ

この記事では、Loguru ライブラリの主な機能について簡単に説明しますが、機能について詳しく知りたい場合は、公式 github を参照してください。

日常生活におけるログ処理には、Loguru ライブラリを使用することをお勧めします。

loguru 公式 Web サイト: https://loguru.readthedocs.io/en/stable/index.html
API ドキュメント: https://loguru.readthedocs.io/en/stable/api.html
プロジェクト アドレス: https://github. com/デルガン/ログル

この記事はhttps://zhuanlan.zhihu.com/p/397181586からの転載です

おすすめ

転載: blog.csdn.net/hubing_hust/article/details/128402860