py-py’s blog

何か書くよ

Pythonのログについて

ログについて

ログを扱う流れ

  1. Loggerオブジェクトの作成
  2. Loggerオブジェクトのメッセージレベル設定
  3. Handlerの作成
  4. Handlerのメッセージレベル設定
  5. LoggerにHandler(の設定)を付与
  6. ログ出力

上記のような流れになる。

単一ファイルを実行した際、ログを標準出力する
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()