Spaces:
Sleeping
Sleeping
File size: 1,750 Bytes
da8bdb9 3a900c7 8ccf878 3a900c7 da8bdb9 3a900c7 afb0c77 3a900c7 da8bdb9 3a900c7 da8bdb9 8ccf878 3a900c7 8ccf878 3a900c7 8ccf878 da8bdb9 3a900c7 8ccf878 3a900c7 46c8ce2 3a900c7 da8bdb9 8ccf878 3a900c7 da8bdb9 8ccf878 da8bdb9 3a900c7 da8bdb9 8ccf878 da8bdb9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# -*- coding: utf-8 -*-
"""
ログハンドラーが重複登録されるのを防ぐために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()
|