Xiangyu Yao

14 papers Journal 13Unranked 1
YearRankTypeTitle / Venue / Authors
2026 J jnl
Future Gener. Comput. Syst.
Xiangzhen Zan, Xiangyu Yao, Ling Chu, Peng Xu, Wenbin Liu
2026 J jnl
Eng. Appl. Artif. Intell.
Xiangyu Yao, Guanyu Wu, Yina Lv, Jie Zhang, Xinbiao Gan, Qiao Li
2025 J jnl
Virtual Real.
Dan Shi, Xiaolu Li, Xiangyu Yao, Zhengtang Tan
2025 J jnl
Knowl. Based Syst.
Xiangyu Yao, Xinglin Piao, Qitan Shao, Yongli Hu, Baocai Yin, Yong Zhang
2024 J jnl
J. Big Data
Qitan Shao, Xinglin Piao, Xiangyu Yao, Yuqiu Kong, Yongli Hu, Baocai Yin, Yong Zhang
2024 J jnl
ACM Trans. Storage
Xiangyu Yao, Qiao Li, Kaihuan Lin, Xinbiao Gan, Jie Zhang, Congming Gao, Zhirong Shen, Quanqing Xu, Chuanhui Yang, Jason Xue
2024 J jnl
Digit. Signal Process.
Xue Liu, Shuang Qiao, Tian Zhang, Chenyi Zhao, Xiangyu Yao
2023 J jnl
J. Chem. Inf. Model.
Xiangzhen Zan, Ranze Xie, Xiangyu Yao, Peng Xu, Wenbin Liu
2023 conf
HotStorage
Hongyang Dang, Xiangyu Yao, Zheng Wan, Qiao Li
2023 J jnl
Comput. Biol. Medicine
Wanmin Lin, Ling Chu, Yanqing Su, Ranze Xie, Xiangyu Yao, Xiangzhen Zan, Peng Xu, Wenbin Liu
2022 J jnl
PLoS Comput. Biol.
Xiangyu Yao, Benjamin L. Heidebrecht, Jing Chen, John J. Tyson
2022 J jnl
PLoS Comput. Biol.
Chunrui Xu, Henry Hollis, Michelle Dai, Xiangyu Yao, Layne T. Watson, Yang Cao, Minghan Chen
2021 J jnl
PLoS Comput. Biol.
Xiangyu Yao, Shihoko Kojima, Jing Chen
2020 J jnl
PLoS Comput. Biol.
Xiangyu Yao, Shihoko Kojima, Jing Chen
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