LoginSignup
34
32

More than 3 years have passed since last update.

Loguruの使い方(Pythonログ出力ライブラリ)

Last updated at Posted at 2019-01-05

Python のベストライブラリ in 2018 - Qiita よりloguruがとても良かったので使い方をメモ

一行addメソッドだけで簡単に設定が行えるのが素晴らしい。

https://github.com/Delgan/loguru
https://loguru.readthedocs.io/en/stable/api/logger.html

追記:logzeroもいいですね。
Pythonのログ出力にlogzeroを使う - kumilog.net

インストール

$ pip install loguru

使い方

単純なprint代わり

デフォルトのログレベルはDEBUG

main.py
from loguru import logger

def main():
    logger.trace("トレース")
    logger.debug("デバッグ")
    logger.info("情報")
    logger.success("成功")
    logger.warning("警告")
    logger.error("エラー")
    logger.critical("クリティカル")

if __name__ == '__main__':
    main()

image.png

ファイル出力

main.py
from loguru import logger

def main():
    logger.add("logtest.log") # 追加
    logger.trace("トレース")
    logger.debug("デバッグ")
    logger.info("情報")
    logger.success("成功")
    logger.warning("警告")
    logger.error("エラー")
    logger.critical("クリティカル")

if __name__ == '__main__':
    main()

image.png

ファイル出力(標準エラー出力は抑制したい)

loguru/__init__.pyでadd()しているので外せば良い。

main.py
from loguru import logger

def main():
    logger.remove() # 追加
    logger.add("logtest.log")
    logger.trace("トレース")
    logger.debug("デバッグ")
    logger.info("情報")
    logger.success("成功")
    logger.warning("警告")
    logger.error("エラー")
    logger.critical("クリティカル")

if __name__ == '__main__':
    main()

image.png

ログローテーション

柔軟な指定が可能
rotationは1ファイルの容量を指定。100 MB、10hなら10時間でローテーションされる
retentionは保持期限を指定。数字だと個数、2 monthsなら2ヶ月など
ローテーションされるファイル名はdatetime型の%Y-%m-%d_%H-%M-%S_%f固定のようだ。

main.py
from loguru import logger

def main():
    logger.remove()
    logger.add("logtest.log", rotation="1 KB", retention=3)
    for x in range(100):
        logger.info("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")

if __name__ == '__main__':
    main()
[k8uwall logtest]$ ls logtest.*
logtest.2019-01-05_12-32-58_296655.log  logtest.2019-01-05_12-32-58_301567.log
logtest.2019-01-05_12-32-58_299136.log  logtest.log

raw出力

main.py
from loguru import logger

def main():
    logger.info("情報")
    logger.opt(raw=True).info("ここはフォーマットに従わない\n")

if __name__ == '__main__':
    main()

image.png

数字付きログローテーション(2020/12/31追記、2021/1/11修正)

main.py
from loguru import logger
from logging.handlers import RotatingFileHandler

handler = RotatingFileHandler("file.log", maxBytes=5000, backupCount=3)
logger.add(handler)
34
32
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
34
32