Rachel Jones

20 papers A* 3A 2B 4C 1Journal 5Unranked 4
YearRankTypeTitle / Venue / Authors
2023 C conf
BSN
Marco Marena, Neethan Ratnakumar, Rachel Jones, Xianlian Zhou, Sanchoy Das, Bo Shen
2015 conf
PerDis
Rachel Jones, Sarah Clinch, Jason Alexander, Nigel Davies, Mateusz Mikusz
2015 J jnl
AI Soc.
Taro Sugihara, Tsutomu Fujinami, Rachel Jones, Kozo Kadowaki, Masaya Ando
2015 J jnl
Computer
Mateusz Mikusz, Sarah Clinch, Rachel Jones, Mike Harding, Christopher Winstanley, Nigel Davies
2014 A* conf
CHI
Michaela Hoare, Steve Benford, Rachel Jones, Natasa Milic-Frayling
2014 A conf
CSCW
Gerard Oleksik, Natasa Milic-Frayling, Rachel Jones
2014 J jnl
Pers. Ubiquitous Comput.
Gerard Oleksik, Natasa Milic-Frayling, Rachel Jones
2013 conf
AAAI Spring Symposium: Shikakeology
Taro Sugihara, Tsutomu Fujinami, Rachel Jones, Kozo Kadowaki, Masaya Ando
2013 B conf
MUM
Gerard Oleksik, Hans-Christian Jetter, Jens Gerken, Natasa Milic-Frayling, Rachel Jones
2012 A conf
CSCW
Gerard Oleksik, Natasa Milic-Frayling, Rachel Jones
2011 ch.
Context and Semantics for Knowledge Management
Natasa Milic-Frayling, Rachel Jones
2010 B conf
MUM
Bram Lievens, Natasa Milic-Frayling, Valentine Lerouge, Jo Pierson, Gerard Oleksik, Rachel Jones, Jamie Costello
2009 A* conf
CHI
Gerard Oleksik, Max L. Wilson, Craig S. Tashman, Eduarda Mendes Rodrigues, Gabriella Kazai, Gavin Smyth, Natasa Milic-Frayling, Rachel Jones
2009 J jnl
Online Inf. Rev.
Rachel Jones
2008 conf
AMCIS
Rachel Jones
2008 B conf
MUM
Natasa Milic-Frayling, Martin J. Hicks, Rachel Jones, Jamie Costello
2007 J jnl
Int. J. Hum. Comput. Interact.
Rachel Jones, Natasa Milic-Frayling, Kerry Rodden, Alan F. Blackwell
2007 conf
Mobile HCI
Natasa Milic-Frayling, Martin J. Hicks, Rachel Jones, Jamie Costello
2004 A* conf
WWW
Natasa Milic-Frayling, Rachel Jones, Kerry Rodden, Gavin Smyth, Alan F. Blackwell, Ralph Sommerer
1999 B conf
GROUP
Paul Dourish, Richard Bentley, Rachel Jones, Allan MacLean
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