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()
ファイル出力
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()
ファイル出力(標準エラー出力は抑制したい)
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()
ログローテーション
柔軟な指定が可能
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()
数字付きログローテーション(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)