スポンサードリンク

Python3.4のLoggingモジュールでログメッセージの文字列フォーマットをstr.formatメソッドの書式指定文字列を使う方法

タイトル長くてすみません。タイトル通りで使い方をただメモしたかっただけです。

# これはダメ
>>> logging.basicConfig(format="[str.format ver] :{} / {}".format(levelname, message))

NameError Traceback (most recent call last)
<ipython-input-15-6b4e7d3e1ac2> in <module>()
----> 1 loghandle=logging.basicConfig(format="str.format log :{} / {}".format(levelname, message))
NameError: name 'levelname' is not defined
# まあそうだよね・・・

# これで出来ました
>>> logging.basicConfig(format="[str.format ver] :{levelname} - {message}", style="{")
>>> logging.warn("warning!!")
[str.format ver] :WARNING - warning!!

basicConfigというかFormatterメソッドなんですが、styleパラメータに"{"を設定すれば使えるようです。

このstyle属性は3.2から追加されたものらしいので、最近のpyhton3でないとダメとのこと。

16.7. logging — Python 用ロギング機能 — Python 3.4.1 ドキュメント -logging.Formatter

Logging クックブック — Python 3.4.1 ドキュメント - Using particular formatting styles throughout your application

最近formatメソッドの書式に慣れてしまってたのでいちいち%演算子に戻るのが面倒だったのでこうなりました。

ちなみにdatefmtで日付のカスタムも出来ますが、str.formatメソッドで出来ませんでした。

>>> logging.basicConfig(format="{asctime} [str.format ver] :{levelname} - {message}", datefmt="{Y}-{m}-{d} {H}:{M}:{S}", style="{")

>>> logging.warn("warning!!")
{Y}-{m}-{d} {H}:{M}:{S} [str.format ver] :WARNING - warning!!

あとこれを調べていて知ったのですが、string.templateというテンプレート方式もあるらしいです。2.4の頃からあるらしいのですが、これ知らなかった。。。

6.1. string — 一般的な文字列操作 — Python 3.3.5 ドキュメント - テンプレート文字列

スポンサードリンク

About Me

実家の自動車プレス金型設計業(sano-design.sakura.ne.jp)に所属。
また東海大学石井研究室(ishiilab.net)でたまにお手伝いしてます。
サイト制作/python/Ubuntu 作ったり扱います。 小さいガジェットがとっても好き。
最近は諸事情で家事業が多めです。

Tags

スポンサードリンク