Irene Lee

17 papers A* 5A 2Journal 4Unranked 6
YearRankTypeTitle / Venue / Authors
2026 A* conf
AAAI
Katherine S. Moore, Helen Zhang, Irene Lee
2025 J jnl
Int. J. Artif. Intell. Educ.
Helen Zhang, Anthony Perry, Irene Lee
2024 A* conf
AAAI
Helen Zhang, Irene Lee, Katherine S. Moore
2024 J jnl
CoRR
Bhan Lam, Zhen-Ting Ong, Kenneth Ooi, Wen-Hui Ong, Trevor Wong, Karn N. Watcharasupat, Vanessa Boey, Irene Lee, Joo Young Hong, Jian Kang, Kar Fye Alvin Lee, Georgios Christopoulos, Woon-Seng Gan
2023 J jnl
Int. J. Artif. Intell. Educ.
Helen Zhang, Irene Lee, Safinah Arshad Ali, Daniella DiPaola, Yihong Cheng, Cynthia Breazeal
2023 conf
SIGCSE (1)
Daniella DiPaola, Katherine S. Moore, Safinah Arshad Ali, Beatriz Perret, Xiaofei Zhou, Helen Zhang, Irene Lee
2022 conf
SIGCSE (1)
Irene Lee, Helen Zhang, Kate S. Moore, Xiaofei Zhou, Beatriz Perret, Yihong Cheng, Ruiying Zheng, Grace Pu
2022 conf
BioCAS
Benjamin Hofflich, Irene Lee, Alan Lunardhi, Nitesh Sunku, Jason Tsujimoto, Gert Cauwenberghs, Akshay Paul
2022 conf
EMBC
Irene Lee, Swathi Prabhu, Meenakshi Singhal, Alice Tor, Gert Cauwenberghs
2022 conf
SIGCSE (2)
Benjamin Walsh, Safinah Arshad Ali, Francisco Castro, Kayla DesPortes, Daniella DiPaola, Irene Lee, William Christopher Payne, Scott Sieke, Helen Zhang
2022 A* conf
AAAI
Irene Lee, Beatriz Perret
2021 J jnl
Comput. Educ. Artif. Intell.
Safinah Arshad Ali, Daniella DiPaola, Irene Lee, Victor Sindato, Grace Kim, Ryan Blumofe, Cynthia Breazeal
2021 A conf
SIGCSE
Irene Lee, Safinah Arshad Ali, Helen Zhang, Daniella DiPaola, Cynthia Breazeal
2021 A* conf
CHI
Safinah Arshad Ali, Daniella DiPaola, Irene Lee, Jenna Hong, Cynthia Breazeal
2021 conf
USENIX ATC
Gyewon Lee, Irene Lee, Hyeonmin Ha, Kyung-Geun Lee, Hwarim Hyun, Ahnjae Shin, Byung-Gon Chun
2021 A* conf
AAAI
Irene Lee, Safinah Arshad Ali
2016 A conf
SIGCSE
Pat Yongpradit, Deborah W. Seehorn, Tammy Pirmann, Irene Lee, Bryan Twarek
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