2025-06-19 03:20:15 +08:00
|
|
|
import structlog, logging, os
|
2025-04-01 09:26:52 +08:00
|
|
|
|
2025-06-19 03:20:15 +08:00
|
|
|
ENV_MODE = os.getenv("ENV_MODE", "LOCAL")
|
2025-07-28 18:53:36 +08:00
|
|
|
|
|
|
|
# Set default logging level based on environment
|
|
|
|
if ENV_MODE.upper() == "PRODUCTION":
|
|
|
|
default_level = "DEBUG"
|
|
|
|
else:
|
2025-07-28 19:13:42 +08:00
|
|
|
default_level = "INFO"
|
2025-07-28 18:53:36 +08:00
|
|
|
|
2025-07-08 03:42:26 +08:00
|
|
|
LOGGING_LEVEL = logging.getLevelNamesMapping().get(
|
2025-07-28 18:53:36 +08:00
|
|
|
os.getenv("LOGGING_LEVEL", default_level).upper(),
|
|
|
|
logging.DEBUG if ENV_MODE.upper() == "PRODUCTION" else logging.INFO
|
2025-07-08 03:42:26 +08:00
|
|
|
)
|
2025-04-01 09:26:52 +08:00
|
|
|
|
2025-06-19 03:20:15 +08:00
|
|
|
renderer = [structlog.processors.JSONRenderer()]
|
2025-07-11 21:06:15 +08:00
|
|
|
# if ENV_MODE.lower() == "local".lower() or ENV_MODE.lower() == "staging".lower():
|
|
|
|
# renderer = [structlog.dev.ConsoleRenderer()]
|
2025-04-01 09:26:52 +08:00
|
|
|
|
2025-06-19 03:20:15 +08:00
|
|
|
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,
|
2025-04-01 09:26:52 +08:00
|
|
|
}
|
2025-06-19 03:20:15 +08:00
|
|
|
),
|
|
|
|
structlog.processors.TimeStamper(fmt="iso"),
|
|
|
|
structlog.contextvars.merge_contextvars,
|
|
|
|
*renderer,
|
|
|
|
],
|
|
|
|
cache_logger_on_first_use=True,
|
2025-07-08 03:42:26 +08:00
|
|
|
wrapper_class=structlog.make_filtering_bound_logger(LOGGING_LEVEL),
|
2025-06-19 03:20:15 +08:00
|
|
|
)
|
2025-04-01 09:26:52 +08:00
|
|
|
|
2025-07-08 03:42:26 +08:00
|
|
|
logger: structlog.stdlib.BoundLogger = structlog.get_logger()
|