Xiangmiao Wu

13 papers A* 2B 1Journal 9Unranked 1
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans Autom. Sci. Eng.
Peng Chi, Zhenmin Wang, Yuan Liu, Haipeng Liao, Xiangmiao Wu, Jianwen Wu, Qin Zhang
2025 J jnl
IEEE Trans. Instrum. Meas.
Peng Chi, Zhenmin Wang, Haipeng Liao, Ting Li, Xiangmiao Wu, Qin Zhang
2024 J jnl
Artif. Intell. Rev.
Peng Chi, Zhenmin Wang, Haipeng Liao, Ting Li, Xiangmiao Wu, Qin Zhang
2024 J jnl
Vis. Comput.
Peng Chi, Haipeng Liao, Qin Zhang, Xiangmiao Wu, Jiyu Tian, Zhenmin Wang
2023 conf
ICONIP (1)
Peng Chi, Zhenmin Wang, Haipeng Liao, Ting Li, Jiyu Tian, Xiangmiao Wu, Qin Zhang
2023 A* conf
CVPR
Huantong Li, Xiangmiao Wu, Fanbing Lv, Daihai Liao, Thomas H. Li, Yonggang Zhang, Bo Han, Mingkui Tan
2023 J jnl
CoRR
Huantong Li, Xiangmiao Wu, Fanbing Lv, Daihai Liao, Thomas H. Li, Yonggang Zhang, Bo Han, Mingkui Tan
2023 B conf
RO-MAN
Peng Chi, Zhenmin Wang, Haipeng Liao, Xiangmiao Wu, Jiyu Tian, Qin Zhang
2022 J jnl
IEEE Trans. Intell. Transp. Syst.
Mingkui Tan, Gengqin Ni, Xu Liu, Shiliang Zhang, Xiangmiao Wu, Yaowei Wang, Runhao Zeng
2022 J jnl
Mach. Learn.
Jiezhang Cao, Jincheng Li, Xiping Hu, Xiangmiao Wu, Mingkui Tan
2021 A* conf
ICCV
Deng Huang, Wenhao Wu, Weiwen Hu, Xu Liu, Dongliang He, Zhihua Wu, Xiangmiao Wu, Mingkui Tan, Errui Ding
2021 J jnl
CoRR
Deng Huang, Wenhao Wu, Weiwen Hu, Xu Liu, Dongliang He, Zhihua Wu, Xiangmiao Wu, Mingkui Tan, Errui Ding
2018 J jnl
IEEE Access
Zhiting Song, Yanming Sun, Hehua Yan, Dingjuan Wu, Peng Niu, Xiangmiao Wu
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