Madiha Khalid

12 papers Misc 2Journal 9Unranked 1
YearRankTypeTitle / Venue / Authors
2025 J jnl
Int. J. Inf. Sec.
Parsa Riaz, Madiha Khalid, Mehdi Hussain, Naveed Riaz, Umar Mujahid, Muhammad Najam-ul-Islam
2025 J jnl
Comput. Mater. Continua
Asad Iqbal, Mehdi Hussain, Qaiser Riaz, Madiha Khalid, Rafia Mumtaz, Ki-Hyun Jung
2024 Misc conf
FIT
Umar Mujahid Khokhar, Wardah Nisar, Binh Tran, Madiha Khalid, Muhammad Najam-ul-Islam
2024 J jnl
IEEE Access
Madiha Khalid, Ali Raza, Faizan Younas, Furqan Rustam, Mónica Gracia Villar, Imran Ashraf, Adnan Akhtar
2023 Misc conf
CISS
Umar Mujahid Khokhar, Madiha Khalid, Muhammad Najam-ul-Islam
2023 conf
FTC (2)
Muhammad Najam-ul-Islam, Madiha Khalid, Umar Mujahid Khokhar
2022 J jnl
Inf.
Madiha Khalid, Muhammad Murtaza Yousaf, Muhammad Umair Sadiq
2019 J jnl
Comput. Informatics
Syed Irtaza Muzaffar, Khurram Shahzad, Faisal Aslam, Madiha Khalid, Muhammad Kamran Malik
2019 J jnl
Secur. Commun. Networks
Madiha Khalid, Umar Mujahid Khokhar, Muhammad Najam-ul-Islam
2018 J jnl
Int. J. Distributed Sens. Networks
Madiha Khalid, Umar Mujahid Khokhar, Muhammad Najam-ul-Islam
2018 J jnl
J. Circuits Syst. Comput.
Umar Mujahid Khokhar, Muhammad Najam-ul-Islam, Madiha Khalid
2018 J jnl
Signal Image Video Process.
Madiha Khalid, Muhammad Murtaza Yousaf, Kashif Murtaza, Syed Mansoor Sarwar
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