Spaces:
Running
Running
# -*- coding: utf-8 -*- | |
""" | |
Reporter | |
ログハンドラーが重複登録されるのを防ぐために1箇所で生成してログハンドラーを返します。 | |
Example: | |
from src.reporter import log | |
log.info("message") | |
# 2024-05-24T12:34:56+0900#アプリ起動中 | |
""" | |
import json | |
from logging import Logger, getLogger | |
import logging.config | |
from typing import Optional | |
from . import PROGRAM_NAME | |
class Reporter: | |
""" | |
シングルトンパターンを適用したロガークラス。 | |
このクラスのインスタンスがまだ存在しない場合は新たに作成し、既に存在する場合はそのインスタンスを返します。 | |
@see https://docs.python.jp/3/howto/logging-cookbook.html | |
""" | |
_instance: Optional[Logger] = None # Reporterクラスの唯一のインスタンスを保持します。 | |
def __new__(cls): | |
""" | |
""" | |
# インスタンスがまだ存在しない場合は新たに作成します。 | |
if not cls._instance: | |
logger = getLogger(PROGRAM_NAME) # ロガーを取得します。 | |
with open(r'config.json', 'r', encoding='utf-8') as f: | |
config = json.load(f) | |
logging.config.dictConfig(config) | |
cls._instance = logger # 作成したロガーを保持します。 | |
return cls._instance # 作成したまたは既存のロガーを返します。 | |
log: Logger = Reporter() # Reporterクラスのインスタンスを取得します。 | |
def main(): | |
""" | |
Entry Point | |
""" | |
log.debug("main") | |
if __name__ == "__main__": | |
main() | |