Nan Sang

30 papers A* 1B 4C 2Misc 4Journal 7Unranked 12
YearRankTypeTitle / Venue / Authors
2023 Misc conf
ICASSP
Zihao Zhang, Nan Sang, Xupeng Wang, Mumuxin Cai
2022 J jnl
J. Circuits Syst. Comput.
Lei Qiao, Maolin Yang, Zewei Chen, Yong Liao, Hang Lei, Nan Sang
2022 Misc conf
ICASSP
Riran Cheng, Nan Sang, Yinyuan Zhou, Xupeng Wang
2022 Misc conf
ICASSP
Zihao Zhang, Nan Sang, Xupeng Wang
2021 J jnl
Neurocomputing
Xupeng Wang, Mumuxin Cai, Ferdous Sohel, Nan Sang, Zhengwei Chang
2021 J jnl
J. Circuits Syst. Comput.
Xiangtian Ma, Nan Sang, Shihua Xiao, Xupeng Wang
2021 conf
HPCC/DSS/SmartCity/DependSys
Riran Cheng, Nan Sang, Yinyuan Zhou, Xupeng Wang
2020 conf
HPCC/DSS/SmartCity
Mumuxin Cai, Nan Sang, Xupeng Wang, Jingyu Zhang
2020 B conf
ICIP
Xiangtian Ma, Nan Sang, Xupeng Wang, Shihua Xiao
2020 Misc conf
ICASSP
Shihua Xiao, Nan Sang, Xupeng Wang, Xiangtian Ma
2019 B conf
ICTAI
Hongyong Sun, Nan Sang, Jia Wu, Chen Wang
2015 J jnl
Comput. Electr. Eng.
Wei Jiang, Yue Ma, Nan Sang, Ziguo Zhong
2014 conf
ICAILP
Xianshu Ding, Hang Lei, Yunbo Rao, Nan Sang
2014 J jnl
Computer
Xia Yang, Nan Sang, Jim Alves-Foss
2013 A* conf
ACM Multimedia
Zong Bo Hao, Qianni Zhang, Ebroul Izquierdo, Nan Sang
2013 J jnl
J. Syst. Archit.
Wei Jiang, Zhenlin Guo, Yue Ma, Nan Sang
2012 C conf
ISPA
Yue Ma, Wei Jiang, Nan Sang, Xia Zhang
2012 conf
ICICA (1)
Rui Zhou, Wensheng Guo, Nan Sang
2012 B conf
ARES
Yue Ma, Wei Jiang, Nan Sang, Ziguo Zhong
2012 conf
MSN
Rui Zhou, Nan Sang
2012 conf
HPCC-ICESS
Wei Jiang, Zhenlin Guo, Yue Ma, Nan Sang
2012 B conf
RTCSA
Yue Ma, Wei Jiang, Nan Sang, Paul Pop
2011 conf
GreenCom
Zhenlin Guo, Wei Jiang, Nan Sang, Yue Ma
2010 conf
FCST
Tai-cong Zhong, Yong Liao, Jian-jing Shen, Xue Zhang, Nan Sang
2010 conf
FCST
Wei Jiang, Wensheng Guo, Nan Sang
2008 conf
RAM
Zong Bo Hao, Nan Sang, Hang Lei
2008 conf
ICESS
Zhengwei Chang, Guangze Xiong, Nan Sang
2007 J jnl
J. Comput. Sci. Technol.
Yong Liao, Xudong Chen, Guangze Xiong, Qingxin Zhu, Nan Sang
2004 conf
ICESS
Jinyu Zhan, Nan Sang, Guangze Xiong
2004 C conf
PRDC
Shiping Yang, Nan Sang, Guangze Xiong
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