38 lines
1.0 KiB
Python
38 lines
1.0 KiB
Python
import logging
|
|
from pathlib import Path
|
|
from typing import Optional
|
|
|
|
|
|
DEFAULT_LOG_FORMAT = "%(asctime)s - %(levelname)s - %(message)s"
|
|
DEFAULT_LOG_PATH = Path(__file__).resolve().parent.parent / "sublogue.log"
|
|
|
|
|
|
def configure_logging(
|
|
level: int = logging.INFO,
|
|
fmt: str = DEFAULT_LOG_FORMAT,
|
|
log_path: Path = DEFAULT_LOG_PATH,
|
|
) -> None:
|
|
"""Configure console and root-level file logging for the application."""
|
|
root_logger = logging.getLogger()
|
|
|
|
if getattr(root_logger, "_sublogue_logging_configured", False):
|
|
return
|
|
|
|
formatter = logging.Formatter(fmt)
|
|
handlers = [
|
|
logging.StreamHandler(),
|
|
logging.FileHandler(log_path, encoding="utf-8"),
|
|
]
|
|
|
|
for handler in handlers:
|
|
handler.setFormatter(formatter)
|
|
root_logger.addHandler(handler)
|
|
|
|
root_logger.setLevel(level)
|
|
root_logger._sublogue_logging_configured = True
|
|
|
|
|
|
def get_logger(name: Optional[str] = None) -> logging.Logger:
|
|
"""Get a logger by name."""
|
|
return logging.getLogger(name or __name__)
|