2022-07-01 14:57:43 +09:00

42 lines
1.4 KiB
Python

import datetime
import logging
import sys
from zoneinfo import ZoneInfo
from constants import DEFAULT_TIMEZONE, LOG_DATE_FORMAT, LOG_FORMAT
from environments import LOG_LEVEL
class SingletonLogger:
# インスタンス生成
@staticmethod
def __internal_new__() -> logging.Logger:
# logger設定
logger = logging.getLogger()
formatter = logging.Formatter(
LOG_FORMAT,
LOG_DATE_FORMAT
)
formatter.converter = lambda *arg: datetime.datetime.now(ZoneInfo(DEFAULT_TIMEZONE)).timetuple()
# ローカル環境で動かす場合、標準出力ハンドラーを追加する
# AWS Lambda上では`LambdaLoggerHandler`がデフォルトでセットされている
if len(sys.argv) == 2 and sys.argv[1] == 'local':
localHandler = logging.StreamHandler()
logger.addHandler(localHandler)
for handler in logger.handlers:
handler.setFormatter(formatter)
level = logging.getLevelName(LOG_LEVEL)
logger.setLevel(level)
return logger
class MeDaCaLogger:
__unique_instance: logging.Logger = None
@staticmethod
def get_logger():
# インスタンス未生成の場合、唯一のインスタンスを生成する
if not MeDaCaLogger.__unique_instance:
MeDaCaLogger.__unique_instance = SingletonLogger.__internal_new__()
return MeDaCaLogger.__unique_instance