ログしたい(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オプションで、ログメッセージのフォーマットを変更できます。

よく使うフォーマットオプション

オプション

説明

{time}

ログの発生時刻

{time:YYYY-MM-DD}

時刻フォーマット指定

{level}

ログレベル(DEBUG, INFO など)

{name}

モジュール名

{function}

関数名

{line}

行番号

{message}

ログメッセージ本体

ログレベルしたい

 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.addlevelオプションで、 ログレベルごとに表示内容や出力先を変更できます。

注釈

ログレベルはargparsetyperなどを使って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に応じた標準的なログディレクトリに保存できます。

リファレンス