Update src/utils/custom_logger.py
Some checks failed
Python Test / python-test (push) Failing after 12s
Some checks failed
Python Test / python-test (push) Failing after 12s
This commit is contained in:
parent
b9ef4422fb
commit
460f097d1e
@ -1,113 +1,113 @@
|
|||||||
import os
|
import os
|
||||||
import logging
|
import logging
|
||||||
import json
|
import json
|
||||||
import functools
|
import functools
|
||||||
from .singleton import Singleton
|
from .singleton import Singleton
|
||||||
|
|
||||||
class CoogelCustomLogger():
|
class CoogelCustomLogger():
|
||||||
"""Google Cloud Functions用のシンプルなカスタムロガー"""
|
"""Google Cloud Functions用のシンプルなカスタムロガー"""
|
||||||
|
|
||||||
def __init__(self, name="main"):
|
def __init__(self, name="main"):
|
||||||
self.logger = logging.getLogger(name)
|
self.logger = logging.getLogger(name)
|
||||||
self.logger.setLevel(logging.INFO)
|
self.logger.setLevel(logging.INFO)
|
||||||
|
|
||||||
if not self.logger.handlers:
|
if not self.logger.handlers:
|
||||||
handler = logging.StreamHandler()
|
handler = logging.StreamHandler()
|
||||||
handler.setLevel(logging.INFO)
|
handler.setLevel(logging.INFO)
|
||||||
# メッセージのみ(フォーマットなし)
|
# メッセージのみ(フォーマットなし)
|
||||||
formatter = logging.Formatter("%(message)s")
|
formatter = logging.Formatter("%(message)s")
|
||||||
handler.setFormatter(formatter)
|
handler.setFormatter(formatter)
|
||||||
self.logger.addHandler(handler)
|
self.logger.addHandler(handler)
|
||||||
|
|
||||||
# 親ロガー(root)への伝播を止める → 二重出力防止
|
# 親ロガー(root)への伝播を止める → 二重出力防止
|
||||||
self.logger.propagate = False
|
self.logger.propagate = False
|
||||||
|
|
||||||
def _log(self, message,level="INFO",**fields):
|
def _log(self, message,level="INFO",**fields):
|
||||||
payload = {
|
payload = {
|
||||||
"severity": level,
|
"severity": level,
|
||||||
"message": f"{message}",
|
"message": f"{message}",
|
||||||
**fields
|
**fields
|
||||||
}
|
}
|
||||||
self.logger.info(json.dumps(payload, ensure_ascii=False))
|
self.logger.info(json.dumps(payload, ensure_ascii=False))
|
||||||
|
|
||||||
def info(self, message, **fields):
|
def info(self, message, **fields):
|
||||||
self._log(message, level="INFO", **fields)
|
self._log(message, level="INFO", **fields)
|
||||||
|
|
||||||
def warning(self, message, **fields):
|
def warning(self, message, **fields):
|
||||||
self._log(message, level="WARNING", **fields)
|
self._log(message, level="WARNING", **fields)
|
||||||
|
|
||||||
def error(self, message, **fields):
|
def error(self, message, **fields):
|
||||||
self._log(message, level="ERROR", **fields)
|
self._log(message, level="ERROR", **fields)
|
||||||
|
|
||||||
def exception(self, message, **fields):
|
def exception(self, message, **fields):
|
||||||
payload = {
|
payload = {
|
||||||
"severity": "ERROR",
|
"severity": "ERROR",
|
||||||
"message": f"{message}",
|
"message": f"{message}",
|
||||||
**fields
|
**fields
|
||||||
}
|
}
|
||||||
self.logger.info(
|
self.logger.info(
|
||||||
json.dumps(payload, ensure_ascii=False),
|
json.dumps(payload, ensure_ascii=False),
|
||||||
exc_info=True
|
exc_info=True
|
||||||
)
|
)
|
||||||
|
|
||||||
def debug(self, message, **fields):
|
def debug(self, message, **fields):
|
||||||
self._log(message, level="DEBUG", **fields)
|
self._log(message, level="DEBUG", **fields)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class CustomLogger(Singleton):
|
class CustomLogger(Singleton):
|
||||||
"""
|
"""
|
||||||
Singleton logger class that initializes a logger with a specified name
|
Singleton logger class that initializes a logger with a specified name
|
||||||
and log file.It provides a method to log entry and exit of functions.
|
and log file.It provides a method to log entry and exit of functions.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, name="main", log_file=None, level=logging.INFO):
|
def __init__(self, name="main", log_file=None, level=logging.INFO):
|
||||||
if hasattr(self, "_initialized") and self._initialized:
|
if hasattr(self, "_initialized") and self._initialized:
|
||||||
return # すでに初期化済みなら何もしない
|
return # すでに初期化済みなら何もしない
|
||||||
|
|
||||||
if os.getenv("ENV", "local")=="local":
|
if os.getenv("ENV", "local")=="local":
|
||||||
self.logger = logging.getLogger(name)
|
self.logger = logging.getLogger(name)
|
||||||
self.logger.setLevel(level)
|
self.logger.setLevel(level)
|
||||||
self.logger.propagate = False
|
self.logger.propagate = False
|
||||||
|
|
||||||
formatter = logging.Formatter(
|
formatter = logging.Formatter(
|
||||||
"%(asctime)s %(levelname)s "
|
"%(asctime)s %(levelname)s "
|
||||||
"[%(filename)s:%(lineno)3d]: %(message)s"
|
"[%(filename)s:%(lineno)3d]: %(message)s"
|
||||||
)
|
)
|
||||||
|
|
||||||
# Console handler
|
# Console handler
|
||||||
ch = logging.StreamHandler()
|
ch = logging.StreamHandler()
|
||||||
ch.setFormatter(formatter)
|
ch.setFormatter(formatter)
|
||||||
self.logger.addHandler(ch)
|
self.logger.addHandler(ch)
|
||||||
|
|
||||||
# File handler
|
# File handler
|
||||||
if log_file:
|
if log_file:
|
||||||
fh = logging.FileHandler(log_file, encoding="utf-8")
|
fh = logging.FileHandler(log_file, encoding="utf-8")
|
||||||
fh.setFormatter(formatter)
|
fh.setFormatter(formatter)
|
||||||
self.logger.addHandler(fh)
|
self.logger.addHandler(fh)
|
||||||
self._initialized = True
|
self._initialized = True
|
||||||
elif os.getenv("ENV") in ["dev", "prd"]:
|
elif os.getenv("ENV") in ["dev", "prd"]:
|
||||||
self.logger = CoogelCustomLogger(name)
|
self.logger = CoogelCustomLogger(name)
|
||||||
self._initialized = True
|
self._initialized = True
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def get_logger(self):
|
def get_logger(self):
|
||||||
return self.logger
|
return self.logger
|
||||||
|
|
||||||
def log_entry_exit(self, func):
|
def log_entry_exit(self, func):
|
||||||
@functools.wraps(func)
|
@functools.wraps(func)
|
||||||
def wrapper(*args, **kwargs):
|
def wrapper(*args, **kwargs):
|
||||||
self.logger.info(f"Enter: {func.__qualname__}")
|
self.logger.info(f"Enter: {func.__qualname__}")
|
||||||
result = func(*args, **kwargs)
|
result = func(*args, **kwargs)
|
||||||
self.logger.info(f"Exit: {func.__qualname__}")
|
self.logger.info(f"Exit: {func.__qualname__}")
|
||||||
return result
|
return result
|
||||||
|
|
||||||
return wrapper
|
return wrapper
|
||||||
|
|
||||||
|
|
||||||
def get_logger(name="main", log_file=None, level=logging.INFO):
|
def get_logger(name="main", log_file=None, level=logging.INFO):
|
||||||
custom_logger = CustomLogger(name, log_file, level)
|
custom_logger = CustomLogger(name, log_file, level)
|
||||||
return custom_logger.get_logger()
|
return custom_logger.get_logger()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user