Skip to content

Commit

Permalink
refactor: Expose interception handler and its allow tuple
Browse files Browse the repository at this point in the history
  • Loading branch information
pawamoy committed Jan 15, 2025
1 parent 05c2704 commit d2e5396
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions src/insiders/_internal/logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ def _update_record(record: Record) -> None:


class _InterceptHandler(logging.Handler):
def __init__(self, level: int = 0, allow: str | tuple[str] | None = None) -> None:
def __init__(self, level: int = 0, allow: tuple[str, ...] = ()) -> None:
super().__init__(level)
self.allow = allow

Expand All @@ -153,7 +153,7 @@ def emit(self, record: logging.LogRecord) -> None:
level = record.levelno

# Prevent too much noise from dependencies
if self.allow and level == "INFO" and not record.name.startswith(self.allow):
if level == "INFO" and not record.name.startswith(self.allow):
level = "DEBUG"

# Find caller from where originated the logged message.
Expand All @@ -162,23 +162,27 @@ def emit(self, record: logging.LogRecord) -> None:
frame = frame.f_back # type: ignore[assignment]
depth += 1

# Log the message, replacing new lines with spaces.
message = record.getMessage().replace("\n", " ")
logger.opt(depth=depth, exception=record.exc_info).log(level, message)


intercept_handler = _InterceptHandler()


def configure_logging(
level: Annotated[str, Doc("Log level (name).")],
path: Annotated[str | Path | None, Doc("Log file path.")] = None,
allow: Annotated[
str | tuple[str] | None,
tuple[str, ...],
Doc(
"""
List of package names for which to allow log levels greater or equal to INFO level.
Packages that are not allowed will see all their logs demoted to DEBUG level.
If unspecified, allow everything.
""",
),
] = None,
] = (),
) -> None:
"""Configure logging."""
sink = path or sys.stderr
Expand All @@ -191,12 +195,14 @@ def configure_logging(
"ERROR": logging.ERROR, # 40
"CRITICAL": logging.CRITICAL, # 50
}.get(level.upper(), logging.INFO)
logging.basicConfig(handlers=[_InterceptHandler(allow=allow)], level=0, force=True)
intercept_handler.allow = allow
logging.basicConfig(handlers=[intercept_handler], level=0, force=True)
loguru_format = (
"<green>{time:YYYY-MM-DD HH:mm:ss.SSS}</green> | "
"<level>{level: <8}</level> | <cyan>{pkg}</cyan> - <level>{message}</level>"
)
logger.configure(handlers=[{"sink": sink, "level": log_level, "format": loguru_format}])
handler = {"sink": sink, "level": log_level, "format": loguru_format}
logger.configure(handlers=[handler]) # type: ignore[list-item]


logger = logger.patch(_update_record)

0 comments on commit d2e5396

Please # to comment.