42 lines
1.4 KiB
Python
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
|