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