Xiaofan Yu

12 papers Journal 8Unranked 4
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Emily Bejerano, Federico Tondolo, Ayaan Qayyum, Xiaofan Yu, Xiaofan Jiang
2026 J jnl
CoRR
Jiajun Cheng, Xiaofan Yu, Subarna Tripathi, Sainan Liu, Shan Lin
2025 J jnl
Signal Image Video Process.
Guang Han, Binming Zeng, Zifan Rui, Yaolong Hu, Xiaofan Yu
2025 J jnl
CoRR
Jiayun Zhang, Shuheng Li, Haiyu Huang, Xiaofan Yu, Rajesh K. Gupta, Jingbo Shang
2025 J jnl
Univers. Access Inf. Soc.
Xiaofan Yu, Yichen Ye, Shan Wu
2024 J jnl
IEEE Access
Yichen Ye, Xiaofan Yu
2024 J jnl
IEEE Access
Xiaofan Yu, Yichen Ye, Bilu Chen, Shaomin Yan, Shan Wu
2023 conf
MSN
Siyuan Zhou, Xiaofan Yu, Bin Tang, Zhihao Qu
2023 J jnl
IEEE Access
Yi Yang, Xiaofan Yu, Zongdeng Zhang, Li Gan
2022 conf
EITCE
Xiaofan Yu, Yanru Zhong, Zhaoyi Zhang
2013 conf
MILCOM
Xiaofan Yu, Anbing Hu, Jinzhang Ji, Lulu Yang, Bo Xin, Ying Dong
2010 conf
VTC Spring
Xiaofan Yu, Chunming Zhao, Chun Pan
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