Carlos Bermejo

18 papers A* 3A 1B 1Journal 9Unranked 4
YearRankTypeTitle / Venue / Authors
2024 J jnl
Found. Trends Hum. Comput. Interact.
Lik-Hang Lee, Tristan Braud, Peng Yuan Zhou, Lin Wang, Dianlei Xu, Zijun Lin, Abhishek Kumar, Carlos Bermejo, Pan Hui
2024 A* conf
ACM Multimedia
Esmée Henrieke Anne de Haas, Lik-Hang Lee, Yiming Huang, Carlos Bermejo, Pan Hui, Zijun Lin
2023 conf
VR Workshops
Esmée Henrieke Anne de Haas, Yiming Huang, Carlos Bermejo, Zijun Lin, Pan Hui, Lik-Hang Lee
2022 J jnl
ACM Comput. Surv.
Carlos Bermejo, Pan Hui
2021 J jnl
CoRR
Lik-Hang Lee, Tristan Braud, Pengyuan Zhou, Lin Wang, Dianlei Xu, Zijun Lin, Abhishek Kumar, Carlos Bermejo, Pan Hui
2021 J jnl
Proc. ACM Hum. Comput. Interact.
Carlos Bermejo, Lik Hang Lee, Paul Chojecki, David Przewozny, Pan Hui
2020 A* conf
ACM Multimedia
Carlos Bermejo, Dimitris Chatzopoulos, Pan Hui
2020 J jnl
IEEE Trans. Mob. Comput.
Dimitris Chatzopoulos, Carlos Bermejo, Sokol Kosta, Pan Hui
2020 conf
ICDE Workshops
Carlos Bermejo, Ting Wu, Xiang Su, Pan Hui
2020 A* conf
ACM Multimedia
Carlos Bermejo, Tristan Braud, Ji Yang, Shayan Mirjafari, Bowen Shi, Yu Xiao, Pan Hui
2019 J jnl
IEEE Commun. Mag.
Dimitris Chatzopoulos, Carlos Bermejo, Ehsan ul Haq, Yong Li, Pan Hui
2017 J jnl
CoRR
Carlos Bermejo, Pan Hui
2017 A conf
MMSys
Dimitris Chatzopoulos, Carlos Bermejo, Zhanpeng Huang, Arailym Butabayeva, Rui Zheng, Morteza Golkarifard, Pan Hui
2017 J jnl
IEEE Access
Dimitris Chatzopoulos, Carlos Bermejo, Zhanpeng Huang, Pan Hui
2017 J jnl
CoRR
Carlos Bermejo, Pan Hui
2017 conf
ICDCS Workshops
Carlos Bermejo, Zhanpeng Huang, Tristan Braud, Pan Hui
2016 B conf
ICNP
Carlos Bermejo, Dimitris Chatzopoulos, Pan Hui
2015 conf
HOTPOST@MobiHoc
Carlos Bermejo, Rui Zheng, Pan Hui
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