Natalia Seoane

16 papers B 1C 1Misc 1Journal 10Unranked 3
YearRankTypeTitle / Venue / Authors
2025 J jnl
SoftwareX
Enrique Comesaña, Julian G. Fernández, Natalia Seoane, Antonio J. García-Loureiro
2023 J jnl
IEEE Access
Javier F. Lozano, Natalia Seoane, Enrique Comesaña, Florencia Almonacid, Eduardo F. Fernandez, Antonio J. García-Loureiro
2021 J jnl
IEEE Access
Ana Ruiz, Carlos Couso, Natalia Seoane, Marc Porti, Antonio J. García-Loureiro, Montserrat Nafría
2020 J jnl
IEEE Access
Daniel Nagy, Gabriel Espineira, Guillermo Indalecio Fernández, Antonio J. García-Loureiro, Karol Kalna, Natalia Seoane
2019 J jnl
IEEE Access
Daniel Nagy, Guillermo Indalecio Fernández, Antonio J. García-Loureiro, Gabriel Espineira, Muhammad A. Elmessary, Karol Kalna, Natalia Seoane
2018 J jnl
Computing
Fernando Gomez-Folgar, Guillermo Indalecio Fernández, Natalia Seoane, Tomás F. Pena, Antonio J. García-Loureiro
2015 B conf
CCGRID
Fernando Gomez-Folgar, Antonio J. García-Loureiro, Tomás F. Pena, J. Isaac Zablah, Natalia Seoane
2015 J jnl
J. Low Power Electron.
Guillermo Indalecio Fernández, Natalia Seoane, Manuel Aldegunde, Karol Kalna, Antonio J. García-Loureiro
2014 conf
HPCC/CSS/ICESS
Fernando Gomez-Folgar, Antonio J. García-Loureiro, Tomás Fernandez Pena, J. Isaac Zablah, Natalia Seoane
2013 J jnl
Int. J. High Perform. Comput. Appl.
Raúl Valín Ferreiro, Carlos Sampedro, Natalia Seoane, Manuel Aldegunde, Antonio J. García-Loureiro, Andres Godoy, Francisco Gámiz
2011 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Antonio J. García-Loureiro, Natalia Seoane, Manuel Aldegunde, Raúl Valín Ferreiro, Asen Asenov, Antonio Martinez, Karol Kalna
2010 J jnl
Comput. Phys. Commun.
Manuel Aldegunde, Natalia Seoane, Antonio J. García-Loureiro, Karol Kalna
2009 conf
eScience
Raúl Valín Ferreiro, Natalia Seoane, Manuel Aldegunde, Antonio J. García-Loureiro
2006 C conf
ISPA
Natalia Seoane, Antonio J. García-Loureiro
2005 conf
PARCO
Natalia Seoane, Antonio J. García-Loureiro, Karol Kalna, Asen Asenov
2004 Misc conf
International Conference on Computational Science
Natalia Seoane, Antonio J. García-Loureiro
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