import logging
import os
_DEFAULT_LOG_FORMAT = "%(asctime)s - %(levelname)s - %(name)s - %(message)s"
def get_logger(
name: str | None,
default_level: str = "WARNING",
) -> logging.Logger:
"""Create and configure a logger with consistent formatting.
Creates a logger with the specified name, sets its level based on the
TQ_LOGGING_LEVEL environment variable (or default), and adds a StreamHandler
if no handlers exist. This is particularly useful for Ray Actor subprocesses
that may not inherit logging configuration from the parent process.
Args:
name: The name for the logger, typically __name__.
default_level: The default logging level if TQ_LOGGING_LEVEL is not set.
Returns:
A configured logging.Logger instance.
"""
logger = logging.getLogger(name)
logger.setLevel(os.getenv("TQ_LOGGING_LEVEL", default_level))
if not logger.hasHandlers():
handler = logging.StreamHandler()
handler.setFormatter(logging.Formatter(_DEFAULT_LOG_FORMAT))
logger.addHandler(handler)
return logger