import structlog, logging, os ENV_MODE = os.getenv("ENV_MODE", "LOCAL") # Set default logging level based on environment if ENV_MODE.upper() == "PRODUCTION": default_level = "DEBUG" else: default_level = "INFO" LOGGING_LEVEL = logging.getLevelNamesMapping().get( os.getenv("LOGGING_LEVEL", default_level).upper(), logging.DEBUG if ENV_MODE.upper() == "PRODUCTION" else logging.INFO ) renderer = [structlog.processors.JSONRenderer()] # if ENV_MODE.lower() == "local".lower() or ENV_MODE.lower() == "staging".lower(): # renderer = [structlog.dev.ConsoleRenderer()] structlog.configure( processors=[ structlog.stdlib.add_log_level, structlog.stdlib.PositionalArgumentsFormatter(), structlog.processors.dict_tracebacks, structlog.processors.CallsiteParameterAdder( { structlog.processors.CallsiteParameter.FILENAME, structlog.processors.CallsiteParameter.FUNC_NAME, structlog.processors.CallsiteParameter.LINENO, } ), structlog.processors.TimeStamper(fmt="iso"), structlog.contextvars.merge_contextvars, *renderer, ], cache_logger_on_first_use=True, wrapper_class=structlog.make_filtering_bound_logger(LOGGING_LEVEL), ) logger: structlog.stdlib.BoundLogger = structlog.get_logger()