Spaces:
Sleeping
Sleeping
| import structlog | |
| from config.settings import AppConfig | |
| from domain.logger import Logger | |
| from pathlib import Path | |
| import logging | |
| # Don't forget to keep logs.json file meaningful. | |
| def setup_logging(logs_path: Path | str): | |
| # log_file = open(logs_path, "a", encoding="utf-8") | |
| structlog.configure( | |
| processors=[ | |
| structlog.processors.StackInfoRenderer(), # Stack strace, showing the exact source of errors. | |
| structlog.processors.format_exc_info, # for Exceptions in JSON | |
| structlog.processors.add_log_level, # Adding log level (info, warning, error) | |
| structlog.processors.TimeStamper( | |
| fmt="iso", utc=True | |
| ), # Adding ISO timestamp | |
| structlog.processors.JSONRenderer(), # Makes JSON outputs | |
| ], | |
| wrapper_class=structlog.make_filtering_bound_logger( | |
| logging.INFO | |
| ), # Profiling info and higher. | |
| # logger_factory = structlog.WriteLoggerFactory(file=log_file), # Save in file instead of terminal | |
| cache_logger_on_first_use=True, # Caching being used for optimization | |
| ) | |
| class StructLogger(Logger): | |
| def __init__(self, settings: AppConfig): | |
| setup_logging(logs_path="") | |
| self._logger = structlog.get_logger() | |
| def info(self, message: str, **kwargs): | |
| print(message) | |
| self._logger.info(message, **kwargs) | |
| def debug(self, message: str, **kwargs): | |
| print(message) | |
| self._logger.debug(message, **kwargs) | |
| def error(self, message: str, **kwargs): | |
| print(message) | |
| self._logger.error(message, **kwargs) | |
| def warn(self, message: str, **kwargs): | |
| # return super().warn(msg, **kwargs) | |
| print(message) | |
| self._logger.warn(message, **kwargs) | |
| def exception(self, message: str, **kwargs): | |
| print(message) | |
| self._logger.exception(message, **kwargs) | |