Nabil A. Lashin

14 papers Journal 14
YearRankTypeTitle / Venue / Authors
2026 J jnl
Biomed. Signal Process. Control.
Mostafa M. Abdel-Aziz, Nabil A. Lashin, Hanaa M. Hamza, Khalid M. Hosny
2025 J jnl
Neural Comput. Appl.
Khalid M. Hosny, Mostafa M. Abdel-Aziz, Nabil A. Lashin, Hanaa M. Hamza
2025 J jnl
Biomed. Signal Process. Control.
Mostafa M. Abdel-Aziz, Nabil A. Lashin, Hanaa M. Hamza, Khalid M. Hosny
2024 J jnl
J. Real Time Image Process.
Eman Abdullah Aldakheel, Doaa Sami Khafaga, Mohamed A. Zaki, Nabil A. Lashin, Hanaa M. Hamza, Khalid M. Hosny
2023 J jnl
Vis. Comput.
Khalid M. Hosny, Mohamed A. Zaki, Nabil A. Lashin, Hanaa M. Hamza
2023 J jnl
IEEE Access
Khalid M. Hosny, Mohamed A. Zaki, Nabil A. Lashin, Mostafa M. Fouda, Hanaa M. Hamza
2023 J jnl
Comput. Syst. Sci. Eng.
Doaa Sami Khafaga, Sarah M. Alhammad, Amal Magdi, Osama El-Komy, Nabil A. Lashin, Khalid M. Hosny
2022 J jnl
IEEE Access
Khalid M. Hosny, Akram M. Mortda, Mostafa M. Fouda, Nabil A. Lashin
2022 J jnl
IEEE Access
Khalid M. Hosny, Mohamed A. Zaki, Hanaa M. Hamza, Mostafa M. Fouda, Nabil A. Lashin
2022 J jnl
Multim. Tools Appl.
Khalid M. Hosny, Amal Magdi, Nabil A. Lashin, Osama El-Komy, Ahmad Salah
2021 J jnl
Sensors
Mostafa M. Abdel-Aziz, Khalid M. Hosny, Nabil A. Lashin, Mostafa M. Fouda
2021 J jnl
Multim. Tools Appl.
Khalid M. Hosny, Taher Magdy, Nabil A. Lashin
2021 J jnl
Multim. Tools Appl.
Mostafa M. Abdel-Aziz, Khalid M. Hosny, Nabil A. Lashin
2019 J jnl
IET Image Process.
Khalid M. Hosny, Hanaa M. Hamza, Nabil A. Lashin
redb/logging_utils.py
← Index redb/logging_utils.py python
"""
Logging utilities and shared enums for REDB.

Contains the ImportResult enum, log formatters, and logger setup functions
used across the ingestor pipeline.
"""
import logging
from logging.handlers import QueueHandler
import os
from enum import Enum


class ImportResult(Enum):
    CORRECTLY = 0
    PARTIALLY = 1
    FAILED = 2
    PENDING = 3
    SKIPPED = 4


class FileNameFormatter(logging.Formatter):
    def format(self, record):
        record.filenameinfo = getattr(record, "filenameinfo", "unknown")
        return super().format(record)


def setup_logger(log_queue, filename):
    logger = logging.getLogger(filename)
    if not logger.handlers:
        if os.getenv("SERVER_ENV") == "prod":
            logger.setLevel(logging.INFO)
        else:
            logger.setLevel(logging.DEBUG)
        handler = QueueHandler(log_queue)
        logger.addHandler(handler)
        logger.propagate = False  # Prevent propagation to parent loggers
    return logger


def logger_thread(log_queue, log_file):
    handler = logging.FileHandler(log_file)
    formatter = FileNameFormatter(
        "%(asctime)s - %(filenameinfo)s - %(levelname)s - %(message)s"
    )
    handler.setFormatter(formatter)

    while True:
        try:
            record = log_queue.get()
            if record is None:
                break
            # Format and write the log record
            message = formatter.format(record)
            handler.stream.write(message + "\n")
            handler.stream.flush()
        except Exception:
            import traceback
            import sys

            print("[ERR] Error in logger thread:", file=sys.stderr)
            traceback.print_exc(file=sys.stderr)


def setup_direct_logger(log_file, filename, pid=None):
    """Setup a logger that writes directly to the log file without using a queue."""
    # Create a unique logger name using the process ID
    logger_name = f"{filename}_{pid}" if pid else filename
    logger = logging.getLogger(logger_name)

    if not logger.handlers:
        handler = logging.FileHandler(log_file)
        formatter = logging.Formatter("%(asctime)s - %(filenameinfo)s - %(levelname)s - %(message)s")
        handler.setFormatter(formatter)
        logger.addHandler(handler)

        if os.getenv("SERVER_ENV") == "prod":
            logger.setLevel(logging.INFO)
        else:
            logger.setLevel(logging.DEBUG)

    # Add filename info to the logger's extra info
    extra = {"filenameinfo": filename}
    logger = logging.LoggerAdapter(logger, extra)

    return logger