logging
について書かれており,
また,ファイルへの出力の仕方も書かれています.
まぁ,しかし,やり方は以下のサイトのスクリプト例とほぼほぼ同じです.
qiita.com
a-zumi.net
しかし,私のPython環境では,どうもlogファイルは作成されても, そこにメッセージを書き込まれていかない. 原因が分かりません.
そこで以下のサイトを見ると,別の書き方が記載されており,
それを真似るとファイル出力されました!
docs.python.org
ポイントはスクリプトの最初でlogging.basicConfig
を実行,
その際に引数filename
を指定し,そこにファイルパスの文字列を渡すという事です.
一行で済んでしまいました!
たしか,
で良かったと思うのですが, この本の並列クローリングする章でlogging.basicConfig
を用いて,
そこで初めて私はlogging
を使い始めたのですが,
ここで書かれているlogging.basicConfig
に引数filename
を追加で指定すれば
ログをファイルとして保存できるという...
さらに,以上にlogging.captureWarnings
を追加実行すると
警告もログとしてファイル出力されます.
参考:logging --- Python 用ロギング機能 — Python 3.9.1 ドキュメント
import logging logging.basicConfig(filename='example.log', level=logging.DEBUG, format='[%(process)d:%(asctime)s] %(message)s' ) logging.captureWarnings(True) logging.info("www") import numpy as np a=np.array([1,2]) b=np.array([[1,2,3],[5,6,7]]) a==b
上記実行するとログファイルが作成されますが,
どうやら警告部分はShift-JISになってしまっているみたいなんですよね...
logging.captureWarnings
にはopen
と同様に
encoding
といった引数が用意されているみたいなのですが,指定してみるとValueError: Unrecognised argument(s): encoding
とエラーが...
書き方が悪いのか...
ちょっと分かりません...
なので,なのか,警告のパス部分が文字化けを起こしますね.
logging.captureWarnings
のfilemode
はデフォルト(指定しない)では'a'
なので前回起動したときのログを残したまま
追加でログが記録されます.
'w'
を指定すると前回のログが全て消され今回のログが上書きされます.