Skip to content

neurotrace.neurotrace_logging.logger_factory

neurotrace.neurotrace_logging.logger_factory

get_logger(name)

Central logger factory for Neurotrace with support for: - Stream logs - Daily rotating file logs - Optional network logging via sockets

Source code in neurotrace/neurotrace_logging/logger_factory.py
def get_logger(name: str) -> logging.Logger:
    """
    Central logger factory for Neurotrace with support for:
    - Stream logs
    - Daily rotating file logs
    - Optional network logging via sockets
    """

    logger = logging.getLogger(name)
    logger.setLevel(getattr(logging, LOG_LEVEL, logging.INFO))
    logger.propagate = False  # prevent duplicate logs

    if not logger.handlers:
        formatter = logging.Formatter("[%(asctime)s] [%(levelname)s] [%(name)s] %(message)s")

        if LOG_TO_STREAM:
            stream_handler = logging.StreamHandler()
            stream_handler.setFormatter(formatter)
            logger.addHandler(stream_handler)

        if LOG_TO_FILE:
            Path(LOG_FILE_PATH).parent.mkdir(parents=True, exist_ok=True)
            file_handler = TimedRotatingFileHandler(LOG_FILE_PATH, when="midnight", backupCount=7)
            file_handler.setFormatter(formatter)
            logger.addHandler(file_handler)

        if LOG_TO_NETWORK:
            try:
                socket_handler = SocketHandler(LOG_HOST, LOG_PORT)
                socket_handler.setFormatter(formatter)
                logger.addHandler(socket_handler)
            except Exception as e:
                logger.warning(f"Could not attach network log handler: {e}")

    return logger