Pythonの優れたサードパーティ製非同期ログライブラリ ろぐる紹介
I.はじめに
Python コードを作成およびデバッグするプロセスでは、ログを記録する必要がよくあります。通常は、Python に付属する組み込みの標準ライブラリ ロギングを使用しますが、このライブラリを使用すると、設定がさらに面倒になります。この記事では、プログラミング効率を向上させるために、最近発見された貴重なサードパーティ ログ ライブラリ Loguru に焦点を当てます。ライブラリの名前は、ログ マスターを意味するヒンディー語から来ています。
まず、Loguru の優雅さを説明するために直感的な比較をしてみましょう。Python に付属のロギングを使用したサンプル コードは次のとおりです。
出力例は次のとおりです。
Loguru ライブラリを使用したサンプルコードは次のとおりです。
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 を確認すると、結果は次のようになります。
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)
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)
操作の結果は次のようになります。
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/デルガン/ログル