Python WebAcademy

Python WebAcademy Blog

Loguru 0.8がおよそ2年ぶりにリリース。ログにタイムゾーンが付き、Python 3.14のt-stringにも対応したニュースを初心者向けに解説

|

2026年11月11日、手軽にログを出せるPythonのライブラリLoguruの0.8.0が公開されました。2024年12月の0.7.3以来、およそ2年ぶりの新しい版です。既定のログの形にタイムゾーンが付くようになり、Python 3.14で入ったt-stringをそのままログに渡せるようになっています。0.7.3と0.8.0で同じコードを動かした結果とともに整理します。

2026年11月11日、Pythonで手軽にログを出せるライブラリLoguruの0.8.0が公開されました。前の0.7.3は2024年12月6日の公開だったので、およそ2年ぶりの新しい版です。

今回は、既定のログの形が変わり、時刻にタイムゾーンが付くようになりました。また、Python 3.14で入ったt-stringを、そのままログのメッセージとして渡せるようにもなっています。

ログは、毎日のように目にするものですよね。今回は、0.7.3と0.8.0で同じコードを動かしながら、何が変わったのかを見ていきます。

まずはLoguruとはどんなものか

最初に、Loguruを知らない方のために、どんなライブラリなのかを簡単に紹介します。Loguruは、プログラムの動きを記録するログを、少ない手間で出すためのライブラリです。

Pythonには、標準ライブラリのloggingもあります。ただし、loggingは設定の項目が多く、初めて使う人には少しとっつきにくいところがあります。

loggingとの違い

Loguruでは、from loguru import loggerの1行だけで、すぐに色付きのログを出せます。違いを、大まかに表にまとめます。

項目 logging Loguru
準備 ロガーやハンドラーの設定が必要 importするだけで使える
メッセージの書き方 %sを使う書き方が基本 {}を使う書き方
ファイルへの書き出し ハンドラーを組み立てる logger.add("app.log")の1行
標準ライブラリか 標準ライブラリ 追加で入れるライブラリ

loggingの使い方は、こちらで紹介しています。【関連記事】Pythonのロギング(logging)入門

0.8で何が変わったのかを整理しよう

続いて、0.8.0の主な変更を表にまとめます。内容は、Loguruの公式リポジトリにある変更履歴CHANGELOG.rstにもとづいています。

分類 主な変更
既定の形 ログの時刻に、タイムゾーンのずれを付ける
新機能 t-stringを、ログのメッセージとして渡せる
新機能 整形する前のメッセージを、record["template"]で取り出せる
新機能 子プロセスでloggerを設定し直すlogger.reinstall()
新機能 rotationに、複数の条件をリストで渡せる
色の設定 環境変数のNO_COLORとFORCE_COLORに従う
安全面 色の指定を読む処理で、ReDoSと呼ばれる問題が起きうる点を修正

PyPIの記録によると、0.8.0が必要とするPythonは3.5以上と書かれています。古いPythonからも使える、間口の広いライブラリです。

ログの時刻に、タイムゾーンが付いた

まずは、誰にでも関係する変更から見ていきましょう。変更履歴によると、既定のログの形に、タイムゾーンのずれが含まれるようになりました。

変更履歴では、そのほうがあいまいさの少ないログになるから、と説明されています。

0.7.3と0.8.0で比べてみた

実際に、同じコードを2つの版で動かしてみました。

import sys

from loguru import logger

logger.remove()
logger.add(sys.stdout, colorize=False)
logger.info("注文を受け付けました")
logger.warning("在庫が残り{}個です", 3)

0.7.3と0.8.0を、それぞれ新しい仮想環境に入れ、日本時間に設定して、手元のPython 3.11で実行した結果です。

Loguru 0.7.3
2026-11-12 11:48:36.680 | INFO     | __main__:<module>:7 - 注文を受け付けました
2026-11-12 11:48:36.680 | WARNING  | __main__:<module>:8 - 在庫が残り3個です

Loguru 0.8.0
2026-11-12 11:48:36.764 +09:00 | INFO     | __main__:<module>:7 - 注文を受け付けました
2026-11-12 11:48:36.764 +09:00 | WARNING  | __main__:<module>:8 - 在庫が残り3個です

0.8.0では、時刻の後ろに+09:00が付きました。これは、世界の基準の時刻より9時間進んでいる、つまり日本時間であることを表しています。

なぜ嬉しいのか

サーバーは、日本時間ではなく、世界の基準の時刻で動いていることがよくあります。時刻だけでは、それが日本時間なのか、9時間ずれた時刻なのか、ログを見ただけでは判断できません。

タイムゾーンの考え方については、こちらで紹介しています。【関連記事】Pythonのdatetimeとは?

ログを読み取るプログラムに注意

一方で、ログの形が変わったので、ログを読み取って集計しているプログラムには影響が出るかもしれません。時刻の部分を決まった形で切り出している場合は、上げる前に確かめておきましょう。

もとの形に戻したい場合は、logger.add()のformat引数に、自分で形を指定すれば大丈夫です。

t-stringをそのまま渡せるようになった

続いて、新機能です。変更履歴によると、0.8.0では、テンプレート文字列、つまりt-stringをログのメッセージとして使えるようになりました。

t-stringは、Python 3.14で加わった、t"..."と書く新しい文字列の書き方です。f-stringとよく似ていますが、すぐに1つの文字列にせず、文字の部分と埋め込んだ値を分けたまま持っておけるのが特徴です。

Python 3.15で試してみた

t-stringはPython 3.14以上でしか書けないので、ここではPython 3.15.2を使いました。名前と個数をt-stringで埋め込んだメッセージを、2つの版で出してみます。

name = "taro"
count = 3
logger.info(t"{name}さんが{count}個買いました")

実行した結果です。

Loguru 0.7.3
INFO | Template(strings=('', 'さんが', '個買いました'), interpolations=(...))

Loguru 0.8.0
INFO | taroさんが3個買いました

0.7.3では、t-stringの中身がそのまま表示されてしまいました。0.8.0では、ふつうの文章として読める形で記録されています。

f-stringの基本は、こちらで紹介しています。【関連記事】Pythonのf-stringとは?

整形する前のメッセージを取り出せる

0.8.0では、record["template"]で、値を埋め込む前のメッセージを取り出せるようになりました。recordとは、Loguruが1つのログについて持っている、時刻やレベルなどの情報をまとめたものです。

試してみた

ログを受け取った関数の中で、整形後のメッセージと、整形前のメッセージを並べて表示してみました。

def show(message):
    r = message.record
    print("message :", r["message"])
    print("template:", r.get("template"))


logger.add(show, format="{message}")
logger.info("{}さんが{}個買いました", "taro", 3)

0.8.0では、templateに{}さんが{}個買いましたと、値を埋める前の形が入っていました。0.7.3では、templateという項目そのものがなく、Noneでした。

値が違っても同じ種類のログを、1つにまとめて数えたいときに便利です。たとえば、どの種類のエラーが多いかを集計するときに役立ちます。

logger.catch()を、async withで使えるように

もう1つ、非同期のプログラムを書く人に嬉しい変更があります。logger.catch()は、ブロックの中で起きた例外をログに記録して、プログラムを止めずに続けるための仕組みです。

変更履歴によると、0.8.0では、このlogger.catch()を、async withで使える非同期のコンテキストマネージャーとしても使えるようになりました。

0.7.3と0.8.0で試してみた

非同期の関数の中で、わざと0で割るエラーを起こしてみました。

import asyncio
import sys

from loguru import logger

logger.remove()
logger.add(sys.stdout, colorize=False, format="{level} | {message}")


async def main():
    async with logger.catch(message="注文の処理で問題が起きました"):
        await asyncio.sleep(0)
        1 / 0
    print("プログラムは止まらずに続いた")


asyncio.run(main())

実行した結果の、要点だけを載せます。

Loguru 0.7.3
TypeError: 'Catcher' object does not support the asynchronous context manager protocol

Loguru 0.8.0
ERROR | 注文の処理で問題が起きました
ZeroDivisionError: division by zero
プログラムは止まらずに続いた

0.7.3では、async withに対応していないというTypeErrorになりました。0.8.0では、エラーがログに記録されたうえで、プログラムは止まらずに次の行へ進んでいます。

そのほかの変更

ほかにも、使い勝手が良くなる変更がたくさん入っています。手元で試したものを、表にまとめます。

変更 0.7.3 0.8.0
rotation=["100 KB", "00:00"]のように複数の条件を渡す TypeErrorで受け付けない 受け付けた
FORCE_COLOR=1で、パイプに出すときも色を付ける 色の記号が付かなかった 色の記号が付いた

rotationは、ログのファイルを一定の大きさや時刻で切り替える仕組みです。0.8.0では、大きさが100KBを超えるか、日付が変わるか、どちらかで切り替える、といった指定ができます。

変更履歴によると、子プロセスでloggerを設定し直すlogger.reinstall()も加わりました。multiprocessingで別のプロセスを使うときに便利だと説明されています。

プロセスの使い方は、こちらで紹介しています。【関連記事】Pythonのmultiprocessingとは?

上げる前にやっておきたいこと

最後に、Loguruを0.8.0へ上げる前に確かめておきたいことを整理します。

順番 確認すること
1 ログを読み取るプログラムが、時刻の後ろの+09:00で困らないか
2 色の設定を、NO_COLORやFORCE_COLORの環境変数で変えていないか
3 Python 3.14以上なら、t-stringでログを書いてみる

私は10年ほどエンジニアとして開発に関わってきましたが、障害のときに、ログの時刻が日本時間なのか世界の基準の時刻なのかわからず、原因の特定に時間がかかったことがあります。タイムゾーンが最初からログに付くのは、地味ですがとてもありがたい変更です。

まとめ

2026年11月11日、Loguru 0.8.0が、およそ2年ぶりに公開されました。既定のログの形にタイムゾーンが付くようになり、t-stringをログのメッセージとして使えるようになったほか、整形前のメッセージの取り出しや、複数の条件でのファイルの切り替えにも対応しています。

ログの形が変わるので、ログを読み取るプログラムがある方は、上げる前に確かめておきましょう。

ここまでお読みいただきありがとうございました。

参考情報

次のアクション

記事で学んだ内容を実際に動かしてみよう

Python WebAcademyでは、ブラウザ上でコードを書きながら基礎から実践まで体系的に学べます。

Python WebAcademyの学習画面

あわせて読む

関連記事

ブログ一覧へ

Python学習ロードマップ

まずはこの3講座から

記事で気になったテーマを、順番に手を動かしながら学べます。

ロードマップを見る