Wanyi Fu

12 papers Journal 12
YearRankTypeTitle / Venue / Authors
2026 J jnl
Expert Syst. Appl.
Chuqiao Yang, Hongfeng Li, Chunlin Li, Yixuan Yuan, Hanbo Tan, Xinlei Ma, Junhao Yan, Qingyuan He, Zhiwei Liu, Zhaoheng Xie, Hongbin Han, Yanye Lu, Wanyi Fu
2025 J jnl
Briefings Bioinform.
Zhiyuan Dong, Yijia Zhang, Yang Shi, Chao Zhang, Chaoyang Han, Hongfeng Li, Yajuan Gao, Wanyi Fu, Yanye Lu, Ping Ren, Lei Liang, Zhiyu Liu
2025 J jnl
CAAI Trans. Intell. Technol.
Nanfang Xu, Shanshan Liu, Yuepeng Chen, Kailai Zhang, Chenyi Guo, Cheng Zhang, Fei Xu, Qifeng Lan, Wanyi Fu, Xingyu Zhou, Bo Zhao, Aodong He, Xiangling Fu, Ji Wu, Weishi Li
2025 J jnl
Expert Syst. Appl.
Chuqiao Yang, Jiayi Xie, Xinrui Huang, Hanbo Tan, Qirun Li, Zeqing Tang, Xinlei Ma, Jiabin Lu, Qingyuan He, Wanyi Fu, Yixing Huang, Junhao Yan, Hongfeng Li, Zhaoheng Xie, Yao Sui, Yanye Lu, Hongbin Han
2025 J jnl
Image Vis. Comput.
Yinzhe Cui, Jing Liu, Ze Teng, Shuangfeng Yang, Hongfeng Li, Pingkang Li, Jiabin Lu, Yajuan Gao, Yun Peng, Hongbin Han, Wanyi Fu
2025 J jnl
IEEE Trans. Computers
Chong Wang, Wanyi Fu, Jiangwei Zhang, Shiyao Li, Rui Hou, Jian Yang, Yu Wang
2024 J jnl
Medical Image Anal.
Baiying Lei, Yafeng Li, Wanyi Fu, Peng Yang, Shaobin Chen, Tianfu Wang, Xiaohua Xiao, Tianye Niu, Yu Fu, Shuqiang Wang, Hongbin Han, Jing Qin
2022 J jnl
IEEE J. Biomed. Health Informatics
Wanyi Fu, Shobhit Sharma, Ehsan Abadi, Alexandros-Stavros Iliopoulos, Qi Wang, Joseph Y. Lo, Xiaobai Sun, William Paul Segars, Ehsan Samei
2022 J jnl
CoRR
Fakrul Islam Tushar, Husam Nujaim, Wanyi Fu, Ehsan Abadi, Maciej A. Mazurowski, Ehsan Samei, William Paul Segars, Joseph Y. Lo
2021 J jnl
IEEE J. Biomed. Health Informatics
Wanyi Fu, Shobhit Sharma, Ehsan Abadi, Alexandros-Stavros Iliopoulos, Qi Wang, Joseph Y. Lo, Xiaobai Sun, William Paul Segars, Ehsan Samei
2020 J jnl
CoRR
Fakrul Islam Tushar, Vincent M. D'Anniballe, Rui Hou, Maciej A. Mazurowski, Wanyi Fu, Ehsan Samei, Geoffrey D. Rubin, Joseph Y. Lo
2020 J jnl
CoRR
Wanyi Fu, Shobhit Sharma, Ehsan Abadi, Alexandros-Stavros Iliopoulos, Qi Wang, Joseph Y. Lo, Xiaobai Sun, William Paul Segars, Ehsan Samei
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