Victor Alchanatis

16 papers C 2Journal 13Unranked 1
YearRankTypeTitle / Venue / Authors
2025 J jnl
Comput. Electron. Agric.
Roy Sadeh, Victor Alchanatis, Roi Ben-David, Zvi Peleg, Ittai Herrmann
2024 J jnl
Comput. Electron. Agric.
Aviva Peeters, Yafit Cohen, Idan Bahat, Noa Ohana-Levi, Eitan Goldshtein, Yishai Netzer, Tomás R. Tenreiro, Victor Alchanatis, Alon Ben-Gal
2024 J jnl
Remote. Sens.
Noa Zuckerman, Yafit Cohen, Victor Alchanatis, Itamar M. Lensky
2023 J jnl
Remote. Sens.
Livia Katz, Alon Ben-Gal, Michael Iggy Litaor, Amos Naor, Aviva Peeters, Eitan Goldshtein, Guy Lidor, Ohaliav Keisar, Stav Marzuk, Victor Alchanatis, Yafit Cohen
2022 J jnl
Sensors
Bar Cohen, Yael Edan, Asher Levi, Victor Alchanatis
2021 J jnl
Remote. Sens.
Idan Bahat, Yishai Netzer, José M. Grünzweig, Victor Alchanatis, Aviva Peeters, Eitan Goldshtein, Noa Ohana-Levi, Alon Ben-Gal, Yafit Cohen
2018 J jnl
Comput. Electron. Agric.
Hao Gan, Won Suk Lee, Victor Alchanatis, Reza Ehsani, John K. Schueller
2018 J jnl
Remote. Sens.
David Helman, Idan Bahat, Yishai Netzer, Alon Ben-Gal, Victor Alchanatis, Aviva Peeters, Yafit Cohen
2016 C conf
IGARSS
Feng Li, Victor Alchanatis
2015 J jnl
Comput. Electron. Agric.
Tyler J. Nigon, David J. Mulla, Carl J. Rosen, Yafit Cohen, Victor Alchanatis, Joseph F. Knight, Ronit Rud
2015 J jnl
Comput. Electron. Agric.
Sharon Nissimov, Jacob Goldberger, Victor Alchanatis
2012 J jnl
Pattern Recognit.
Shahar Laykin, Victor Alchanatis, Yael Edan
2009 J jnl
IEEE Geosci. Remote. Sens. Lett.
Maxim Shoshany, Ophir Almog, Victor Alchanatis
2007 C conf
IGARSS
Ophir Almog, Maxim Shoshany, Victor Alchanatis
2006 J jnl
J. Real Time Image Process.
Ronit Rud, Maxim Shoshany, Victor Alchanatis, Yafit Cohen
2003 conf
IASSE
Shahar Laykin, Yael Edan, Victor Alchanatis
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