Oliver Fernandez Gil

15 papers A 1B 1C 2Misc 1Journal 1Unranked 9
YearRankTypeTitle / Venue / Authors
2018 B conf
LPAR
Franz Baader, Oliver Fernandez Gil, Pavlos Marantidis
2018 conf
Description Logics
Franz Baader, Oliver Fernandez Gil, Maximilian Pensel
2018 conf
GCAI
Franz Baader, Oliver Fernandez Gil, Maximilian Pensel
2017 C conf
LATA
Franz Baader, Oliver Fernandez Gil, Pavlos Marantidis
2017 Misc conf
SAC
Franz Baader, Oliver Fernandez Gil
2016 A conf
ECAI
Franz Baader, Oliver Fernandez Gil
2015 conf
FroCos
Franz Baader, Gerhard Brewka, Oliver Fernandez Gil
2015 conf
Description Logics
Oliver Fernandez Gil, Franz Baader, Gerhard Brewka
2014 conf
AFL
Claudia Carapelle, Shiguang Feng, Oliver Fernandez Gil, Karin Quaas
2014 J jnl
CoRR
Oliver Fernandez Gil
2014 conf
Joint Workshop of the German Research Training Groups in Computer Science
Oliver Fernandez Gil
2014 C conf
LATA
Claudia Carapelle, Shiguang Feng, Oliver Fernandez Gil, Karin Quaas
2013 conf
Description Logics
Franz Baader, Oliver Fernandez Gil, Barbara Morawska
2013 conf
UNIF@RTA/TLCA
Franz Baader, Oliver Fernandez Gil, Barbara Morawska
2013 conf
FroCos
Franz Baader, Oliver Fernandez Gil, Barbara Morawska
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