Pythonで私が使っている自作のLoggerプログラムを紹介します。
まずはフォルダ構成ですが、以下のファイル(logger.py)をlibsディレクトリ内に保存する構成にしています。
import logging
class Logger:
@staticmethod
def get_logger(name: str = "default_logger", log_file: str = "test.log", stream: bool = True):
logger = logging.getLogger(name)
if not logger.hasHandlers(): # Avoid adding multiple handlers if already configured
handler = logging.FileHandler(log_file, encoding="utf-8")
formatter = logging.Formatter(
"%(asctime)s - %(levelname)s - %(name)s - %(message)s"
)
handler.setFormatter(formatter)
logger.addHandler(handler)
logger.setLevel(logging.INFO)
# Stream (Console) Handler
if stream :
console_handler = logging.StreamHandler()
console_formatter = logging.Formatter(
"%(asctime)s - %(levelname)s - %(name)s - %(message)s"
)
console_handler.setFormatter(console_formatter)
logger.addHandler(console_handler)
return logger
呼び出すPythonスクリプトの本体側の処理です。以下のようにlibsにあるLoggerを呼び出しています。
@staticmethodを使っているのでインスタンス生成せずにそのまま利用することができます。
※事前にlogsフォルダを作成しておく必要があります。
実行すると自動的にlogs/<スクリプト名>.logという名前でログが生成されます。
import os
from libs.logger import Logger
## Logger
dir_path = os.path.dirname(__file__)
log = Logger.get_logger("my_logger",(dir_path + "/logs/" + os.path.basename(__file__) + ".log"), True)
def main():
try:
log.info("Start Script !!!!!")
<ここに処理>
log.info("End Script !!!!!")
except KeyboardInterrupt:
log.info(f"Exiting program.")
except Exception as e:
tb = traceback.format_exc()
log.info(f"Unexpected error at top level: {e}\nTraceback:\n{tb}")
if __name__ == "__main__":
main()
ログを有効に使うことで、実行履歴の管理だけでなく、デバックにも便利です。ぜひ使ってみてください。
Python学習におすすめの書籍
今回は以上となります。
コメント