Xiaoan Lu

20 papers A 2B 7C 2Journal 3Unranked 6
YearRankTypeTitle / Venue / Authors
2011 A conf
ICME
Qian Chen, Yunfei Zheng, Peng Yin, Xiaoan Lu, Joel Sole, Qian Xu, Edouard François, Dapeng Wu
2011 B conf
ICIP
Yunfei Zheng, Peng Yin, Qian Xu, Joel Sole, Xiaoan Lu
2010 B conf
ICIP
Liwei Guo, Peng Yin, Yunfei Zheng, Xiaoan Lu, Qian Xu, Joel Sole
2010 B conf
ICIP
Thong T. Do, Xiaoan Lu, Joel Sole
2010 B conf
ICIP
Kiran Misra, Joel Sole, Xiaoan Lu, Peng Yin, Yunfei Zheng, Qian Xu
2010 B conf
ICIP
Liwei Guo, Peng Yin, Yunfei Zheng, Xiaoan Lu, Qian Xu, Joel Sole
2009 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Qian Xu, Xiaoan Lu, Yali Liu, Cristina Gomila
2008 B conf
ICIP
Qian Xu, Yali Liu, Xiaoan Lu, Cristina Gomila
2008 C conf
ISCAS
Yali Liu, Xiaoan Lu, Cristina Gomila, Qian Xu
2007 conf
ICIP (6)
Xiaoan Lu, Jiefu Zhai, Cristina Gomila
2007 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Xiaoan Lu, Yao Wang, Elza Erkip, David J. Goodman
2005 conf
ISCAS (2)
Xiaoan Lu, Alexis Michael Tourapis, Peng Yin, Jill M. Boyce
2005 conf
ICASSP (3)
Xiaoan Lu, Yao Wang, Elza Erkip, David J. Goodman
2005 A conf
ICME
Yao Wang, Zhenyu Wu, Jill M. Boyce, Xiaoan Lu
2004 B conf
GLOBECOM
Xiaoan Lu, David J. Goodman, Yao Wang, Elza Erkip
2004 C conf
VCIP
Xiaoan Lu, Yingwei Chen, Yao Wang
2004 conf
ISCAS (2)
Xiaoan Lu, Thierry Fernaine, Yao Wang
2004 conf
ICC
Xiaoan Lu, Yao Wang, Elza Erkip, David J. Goodman
2003 J jnl
IEEE J. Sel. Areas Commun.
Xiaoan Lu, Elza Erkip, Yao Wang, David J. Goodman
2002 conf
ICIP (1)
Xiaoan Lu, Yao Wang, Elza Erkip
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