Naoki Saijo

18 papers A* 2B 6C 1Journal 6Unranked 3
YearRankTypeTitle / Venue / Authors
2026 J jnl
PeerJ Comput. Sci.
Ryota Nishizono, Makio Kashino, Yasuharu Koike, Naoki Saijo
2026 J jnl
Comput. Hum. Behav.
Ken Watanabe, Sorato Minami, Naoki Saijo, Makio Kashino
2026 J jnl
Comput. Hum. Behav.
Sorato Minami, Ken Watanabe, Naoki Saijo, Makio Kashino
2024 B conf
CogSci
Sorato Minami, Ken Watanabe, Naoki Saijo, Makio Kashino
2024 B conf
CogSci
Yukina Natsume, Aiko Murata, Kazuaki Honda, Naoki Saijo
2024 J jnl
Comput. Hum. Behav.
Sorato Minami, Haruki Koyama, Ken Watanabe, Naoki Saijo, Makio Kashino
2024 B conf
CogSci
Ken Watanabe, Naoki Saijo, Sorato Minami, Makio Kashino
2023 B conf
CogSci
Yukina Natsume, Aiko Murata, Kazuaki Honda, Naoki Saijo
2023 B conf
SMC
Ryota Nishizono, Naoki Saijo, Makio Kashino
2023 B conf
CogSci
Aiko Murata, Kazuaki Honda, Kakagu Komazaki, Naoki Saijo
2022 J jnl
CoRR
Takayoshi Yamaguchi, Dan Mikami, Seiji Matsumura, Naoki Saijo, Makio Kashino
2021 C conf
CoG
Sorato Minami, Ken Watanabe, Naoki Saijo, Makio Kashino
2021 conf
EMBC
Naoki Saijo, Ryota Nishizono, Makio Kashino
2021 J jnl
CoRR
Seiji Matsumura, Dan Mikami, Naoki Saijo, Makio Kashino
2021 conf
ETRA Short Papers
Ryota Nishizono, Naoki Saijo, Makio Kashino
2019 conf
EMBC
Yuichi Higuchi, Naoki Saijo, Takako Ishihara, Tomohiro Usui, Takahiro Murakami, Makoto Miyata, Kazuyoshi Ono, Souichiro Usui, Hiroyoshi Togo
2019 A* conf
VR
Kosuke Takahashi, Dan Mikami, Mariko Isogawa, Yoshinori Kusachi, Naoki Saijo
2018 A* conf
VR
Mariko Isogawa, Dan Mikami, Takehiro Fukuda, Naoki Saijo, Kosuke Takahashi, Hideaki Kimata, Makio Kashino
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