Madjid Eshaghi Gordji

13 papers Journal 12Unranked 1
YearRankTypeTitle / Venue / Authors
2025 J jnl
Inf.
Saeed Shouri, Manuel de la Sen, Madjid Eshaghi Gordji
2022 J jnl
J. Appl. Math.
Zohreh Lashgari, Alireza Bahiraie, Madjid Eshaghi Gordji
2018 J jnl
CoRR
Gholamreza Askari, Madjid Eshaghi Gordji, Ali Zarei
2017 J jnl
Inf. Sci.
Sadegh Abbaszadeh, Madjid Eshaghi Gordji, Endre Pap, Anikó Szakál
2016 conf
MICAI (2)
Anikó Szakál, Endre Pap, Sadegh Abbaszadeh, Madjid Eshaghi Gordji
2011 J jnl
Int. J. Math. Math. Sci.
Madjid Eshaghi Gordji, Hamid Khodaei, Hark-Mahn Kim
2011 J jnl
Math. Comput. Model.
Madjid Eshaghi Gordji, Hamid Baghani, Yeol Je Cho
2011 J jnl
J. Appl. Math.
Abbas Javadian, Elahe Sorouri, Gwang Hui Kim, Madjid Eshaghi Gordji
2011 J jnl
J. Appl. Math.
Madjid Eshaghi Gordji, Hamid Baghani, Omid Baghani
2011 J jnl
J. Appl. Math.
Madjid Eshaghi Gordji, Mohammad Bagher Ghaemi, Gwang Hui Kim, Badrkhan Alizadeh
2011 J jnl
Comput. Math. Appl.
Madjid Eshaghi Gordji, Hamid Khodaei, Mahdie Kamyar
2010 J jnl
Appl. Math. Lett.
Madjid Eshaghi Gordji, M. B. Savadkouhi
2009 J jnl
Appl. Math. Lett.
Madjid Eshaghi Gordji, Ali Ebadian
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