ログしたい(Loguru)
1$ pip3 install loguru
1from loguru import logger
2
3logger.debug("Debug情報")
4logger.info("Info情報")
5logger.warning("Warning情報")
6logger.error("Error情報")
loguruはロギングを簡単にするパッケージです。
標準のloggingモジュールは初期設定がいろいろ必要ですが、このloguruパッケージは設定なしで使いはじめることができます。
デフォルトの出力先はstderr(標準エラー出力)です。
注釈
ログ表示をカスタマイズする場合は、
logger.remove()でデフォルトのハンドラーを
削除するとよいです。
フォーマットしたい
1from loguru import logger
2
3# 詳細なフォーマット
4fmt = "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {name}:{function}:{line} | {message}"
5logger.add("app.log", format=fmt)
6
7logger.info("カスタムフォーマットで保存")
formatオプションで、ログメッセージのフォーマットを変更できます。
よく使うフォーマットオプション
オプション |
説明 |
|---|---|
|
ログの発生時刻 |
|
時刻フォーマット指定 |
|
ログレベル(DEBUG, INFO など) |
|
モジュール名 |
|
関数名 |
|
行番号 |
|
ログメッセージ本体 |
ログレベルしたい
1from loguru import logger
2
3# デフォルトのログハンドラーを削除
4logger.remove()
5
6# DEBUG
7fmt = "{time:YYYY-MM-DDTHH:mm:ss} | <level>{level:8}</level> | <cyan>{name}.{function}:{line}</cyan> | <level>{message}</level>"
8logger.add(sys.stderr, format=fmt, level="DEBUG")
9
10# SUCCESS
11fmt = "{time:YYYY-MM-DDTHH:mm:ss} | <level>{level:8}</level> | <level>{message}</level>"
12logger.add(sys.stderr, format=fmt, level="SUCCESS")
logger.addのlevelオプションで、
ログレベルごとに表示内容や出力先を変更できます。
注釈
ログレベルはargparseやtyperなどを使ってCLIオプションで変更できるようにしてください。
ファイルに保存したい
1from loguru import logger
2
3# デフォルトのハンドラーを削除(=stderr出力を無効化)
4logger.remove()
5
6# ファイルに保存する
7logger.add("app.log")
8logger.info("ファイルに保存されます")
logger.addの第一引数にファイルパスを指定することで、ログをファイルに保存できます。
デフォルトでは、stderrの出力に加えてファイルに保存されます。
ログローテーションしたい
1from loguru import logger
2
3# 日ごとにファイルを分割する
4logger.add("app.log", rotation="00:00")
5
6# サイズが10MBを超えたら分割
7logger.add("app.log", rotation="10 MB")
8
9# ファイル数を制限する(古いファイルを削除)
10logger.add("app.log", rotation="00:00", retention="7 days")
ローテーション機能を使うことで、ログファイルが大きくなり続けるのを防ぐことができます。
rotationオプションで、ログファイルを分割するタイミングを指定できます。
時刻や曜日、ファイルサイズなどを指定できます。
retentionオプションで、ログファイルを削除するタイミングを指定できます。
日数やファイル数を指定できます。
ロガーの初期化
1# src/packagename/log.py
2from loguru import logger
3import sys
4from pathlib import Path
5import platformdirs
6
7def setup_logger(debug: bool = False):
8 logger.remove()
9
10 # XDG準拠のログディレクトリを取得
11 log_dir = Path(platformdirs.user_log_dir("PACKAGE_NAME"))
12 log_dir.mkdir(parents=True, exist_ok=True)
13
14 fmt = "{time:YYYY-MM-DD HH:mm:ss} | {level: <8} | {message}"
15
16 if debug:
17 logger.add(sys.stderr, format=fmt, level="DEBUG")
18
19 # ログファイルを保存
20 logger.add(
21 log_dir / "app.log",
22 format=fmt,
23 level="INFO",
24 rotation="00:00",
25 retention="7 days"
26 )
27
28# 使用方法
29setup_logger(debug=True)
30logger.info("ログが保存されました")
実用的なロガーのサンプルです。
platformdirsを使うことで、OSに応じた標準的なログディレクトリに保存できます。