Pythonのログについて
ログについて
ログを扱う流れ
- Loggerオブジェクトの作成
- Loggerオブジェクトのメッセージレベル設定
- Handlerの作成
- Handlerのメッセージレベル設定
- LoggerにHandler(の設定)を付与
- ログ出力
上記のような流れになる。
単一ファイルを実行した際、ログを標準出力する
import logging from logging import getLogger # 標準出力用のHandler from logging import StreamHandler # logger = getLogger("ファイル名") logger = getLogger(__name__) # 1 logger.setLevel(logging.DEBUG) #2 stream_handler = StreamHandler() #3 stream_handler.setLevel(logging.DEBUG) #4 logger.addHandler(strem_handler) #5 logger.debug("log from logger") #6
単一ファイルを実行した際、ログを別ファイルへ出力する
import logging from logging import getLogger # 標準出力用のHandler from logging import StreamHandler # ファイル出力用のHandler from logging import FileHandler logger = getLogger(__name__) #1 logger.setLevel(logging.DEBUG) #2 # file_handler = FileHandler("出力したいファイル名", "モード") file_handler = FileHandler("logger_file.log", "a") #3 file_handler.setLevel(logging.DEBUG) #4 logger.addHandler(file_handler) #5 logger.debug("test message") #6
フォーマットの指定
import logging from logging import Formatter handle_format = Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
複数ファイルにまたがるログの排出
想定:loggerの設定はログファイルで行い、別ファイルの処理が走ったときにloggerで標準出力及びファイル出力でログをはく
まずはログファイルを書いて、loggerの設定を行う
loggerconf.py
import logging from logging import StreamHandler from logging import FileHandler from logging import getLogger from logging import Formatter logger = getLogger("main")# ここに実行するファイル名を記載する logger.setLevel(logging.DEBUG) stream_handler = StreamHandler() stream_handler.setLevel(logging.DEBUG) file_handler = FileHandler("check_status.log", "a", encoding="utf-8") # ここにログを排出するファイルを指定する file_handler.setLevel(logging.DEBUG) handle_format = Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') file_handler.setFormatter(handle_format) stream_handler.setFormatter(handle_format) logger.addHandler(stream_handler) logger.addHandler(file_handler)
次に実行ファイルを作成する
main.py
import loggerconf def testshowlog(): try: loggerconf.logger.info("log test start") #何かの処理 except Exception as err: loggerconf.logger.error(err) finally: loggerconf.logger.info("log test end") if __name__ == "__main__": testshowlog()