Naotake Natori

15 papers A 2C 1Misc 1Journal 5Unranked 6
YearRankTypeTitle / Venue / Authors
2024 conf
ACCV (7)
Phan Thi Thanh Huyen, The Hiep Nguyen, Minh Huy Vu Nguyen, Trung Thai Tran, Tran Vu Pham, Duc Dung Nguyen, Truong Vinh Truong Duy, Naotake Natori
2024 J jnl
Image Vis. Comput.
Phan Thi Thanh Huyen, Minh-Quan Viet Bui, Duc Dung Nguyen, Tran Vu Pham, Truong Vinh Truong Duy, Naotake Natori
2023 J jnl
CoRR
Keiichi Tamai, Tsuyoshi Okubo, Truong Vinh Truong Duy, Naotake Natori, Synge Todo
2022 A conf
IROS
Masakazu Tobeta, Yoshihide Sawada, Ze Zheng, Sawa Takamuku, Naotake Natori
2022 conf
ECCV Workshops (5)
Manogna Sreenivas, Sawa Takamuku, Soma Biswas, Aditya Chepuri, Balasubramanian Vengatesan, Naotake Natori
2022 conf
DCASE
Rie Koga, Sawa Takamuku, Keisuke Imoto, Naotake Natori
2022 J jnl
Sensors
Shin-ichi Ikegawa, Ryuji Saiin, Yoshihide Sawada, Naotake Natori
2022 J jnl
CoRR
Shin-ichi Ikegawa, Ryuji Saiin, Yoshihide Sawada, Naotake Natori
2022 conf
IWAENC
Yukiko Takahashi, Sawa Takamuku, Keisuke Imoto, Naotake Natori
2022 J jnl
Computer
Hironori Washizaki, Foutse Khomh, Yann-Gaël Guéhéneuc, Hironori Takeuchi, Naotake Natori, Takuo Doi, Satoshi Okuda
2021 conf
CVPR Workshops
Anurag Singh, Naren Doraiswamy, Sawa Takamuku, Megh Bhalerao, Titir Dutta, Soma Biswas, Aditya Chepuri, Balasubramanian Vengatesan, Naotake Natori
2020 C conf
ICMLA
Truong Vinh Truong Duy, Naotake Natori
2020 A conf
ICSME
Hironori Washizaki, Hironori Takeuchi, Foutse Khomh, Naotake Natori, Takuo Doi, Satoshi Okuda
2017 Misc conf
MVA
Ryutaro Kitagawa, Yoshihiko Mochizuki, Satoshi Iizuka, Edgar Simo-Serra, Hiroshi Matsuki, Naotake Natori, Hiroshi Ishikawa
1995 conf
ICNN
Naotake Natori, Kazuo Nishimura
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