basicConfigでファイルへ出力
basicConfigでfilename引数を指定。
logging.basicConfig(level=logging.DEBUG,
filename="test.log",
format="%(asctime)s %(levelname)-7s %(message)s")
basicConfigで設定する場合は、logger全体(rootLogger)への一括設定となり簡単ではあるが細かい設定はできない。
注意
basicConfigはすでにrootLoggerにハンドラが設定されているとなにも処理をしない。したがってbasicConfigで簡易設定できるのだが、2回目はなにも変更されないので注意。levelなどを変更しようと思ってもすでにhandlerが設定されているとなにも処理されない。他人が使用するライブラリなどではbasicConfigは使用しないほうがよい。
force=Trueというパラメータ設定することで強制的に現在設定ずみのハンドラを削除して再設定することができるが、これは3.8で追加された機能。また3.7以前で使用してもエラーにはならないので注意。
Loggerを設定してファイルへログ出力
basicConfigからのrootLoggerではなく、自分でLoggerを取得して詳細に設定する。
以下の例では、Loggerに2つのHandlerを設定して、1回の出力処理で2種類Handler(StreamとFile)への出力をする例。Handlerについては、こちらを参照。
logger(level=DEBUG) --+-- handler1(StreamHandler)
+-- handler2(FileHandler) level=WARN
import logging
logger = logging.getLogger("logger") #logger名loggerを取得
logger.setLevel(logging.DEBUG) #loggerとしてはDEBUGで
#handler1を作成
handler1 = logging.StreamHandler()
handler1.setFormatter(logging.Formatter("%(asctime)s %(levelname)8s %(message)s"))
#handler2を作成
handler2 = logging.FileHandler(filename="test.log") #handler2はファイル出力
handler2.setLevel(logging.WARN) #handler2はLevel.WARN以上
handler2.setFormatter(logging.Formatter("%(asctime)s %(levelname)8s %(message)s"))
#loggerに2つのハンドラを設定
logger.addHandler(handler1)
logger.addHandler(handler2)
#出力処理
logger.debug("debug message")
logger.info("info message")
logger.warn("warn message")
logger.error("error message")
実行結果
$ ./logger.py
2012-04-20 12:16:36,234 DEBUG debug message
2012-04-20 12:16:36,236 INFO info message
2012-04-20 12:16:36,236 WARNING warn message
2012-04-20 12:16:36,236 ERROR error message
$ cat test.log
2017-06-13 10:36:11,231 WARNING warn message
2017-06-13 10:36:11,231 ERROR error message