Ville Salo

101 papers A* 1A 1B 2C 6Misc 1Journal 69Unranked 21
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Ville Salo, Ilkka Törmä
2025 conf
AUTOMATA
Tom Favereau, Ville Salo
2025 J jnl
CoRR
Tom Favereau, Ville Salo
2025 J jnl
Int. J. Algebra Comput.
Ville Salo
2025 J jnl
Nat. Comput.
Ville Salo, Juliette Schabanel
2025 J jnl
Theor. Comput. Sci.
Ville Salo, Ilkka Törmä
2025 conf
AUTOMATA
Benjamin Hellouin de Menibus, Ville Salo, Ilkka Törmä
2025 J jnl
CoRR
Ville Salo
2024 J jnl
CoRR
Ville Salo
2024 J jnl
Fundam. Informaticae
Ville Salo, Ilkka Törmä
2024 J jnl
CoRR
Laurent Bartholdi, Ville Salo
2024 J jnl
CoRR
Laurent Bartholdi, Ville Salo
2023 J jnl
J. Comput. Syst. Sci.
Ville Salo, Ilkka Törmä
2023 J jnl
CoRR
Ville Salo, Ilkka Törmä
2023 conf
AUTOMATA
Ville Salo, Ilkka Törmä
2023 J jnl
CoRR
Ville Salo, Ilkka Törmä
2023 J jnl
CoRR
Ville Salo, Ilkka Törmä
2023 J jnl
Nat. Comput.
Ville Salo
2023 J jnl
CoRR
Sebastián Barbieri, Jarkko Kari, Ville Salo
2022 J jnl
Inf. Comput.
Jarkko Peltomäki, Ville Salo
2022 J jnl
Theor. Comput. Sci.
Ville Salo, Guillaume Theyssier, Ilkka Törmä
2022 J jnl
J. Comput. Syst. Sci.
Ville Salo
2022 J jnl
CoRR
Antonin Callard, Ville Salo
2022 conf
Automata and Complexity
Ville Salo, Ilkka Törmä
2022 J jnl
CoRR
Ville Salo
2022 conf
AUTOMATA
Ville Salo, Juliette Schabanel
2022 A* conf
ICALP
Ville Salo, Ilkka Törmä
2021 J jnl
CoRR
Jarkko Peltomäki, Ville Salo
2021 J jnl
CoRR
Ville Salo, Guillaume Theyssier, Ilkka Törmä
2021 J jnl
Int. J. Algebra Comput.
Ville Salo, Ilkka Törmä
2021 J jnl
CoRR
Johan Kopra, Ville Salo
2021 J jnl
Axioms
Ville Salo
2021 conf
AUTOMATA
Ville Salo
2020 J jnl
CoRR
Ville Salo, Ilkka Törmä
2020 J jnl
CoRR
Ville Salo
2020 J jnl
CoRR
Ville Salo
2020 conf
Automata
Ville Salo
2020 J jnl
CoRR
Ville Salo
2020 J jnl
CoRR
Ville Salo
2020 J jnl
Nat. Comput.
Jarkko Kari, Ville Salo, Thomas Worsch
2020 J jnl
CoRR
Laurent Bartholdi, Ville Salo
2019 J jnl
CoRR
Ville Salo
2019 J jnl
CoRR
Ville Salo, Ilkka Törmä
2019 J jnl
CoRR
Ville Salo
2019 J jnl
RAIRO Theor. Informatics Appl.
Jarkko Peltomäki, Ville Salo
2018 conf
Automata
Jarkko Kari, Ville Salo, Thomas Worsch
2018 J jnl
CoRR
Jarkko Kari, Ville Salo, Thomas Worsch
2018 J jnl
CoRR
Ville Salo
2018 J jnl
CoRR
Ville Salo
2018 J jnl
CoRR
Ville Salo
2017 C conf
CiE
Ville Salo, Ilkka Törmä
2017 J jnl
CoRR
Benjamin Hellouin de Menibus, Ville Salo, Guillaume Theyssier
2017 J jnl
J. Comput. Syst. Sci.
Ville Salo
2017 conf
AUTOMATA
Pierre Guillon, Ville Salo
2017 J jnl
Theor. Comput. Sci.
Tim Boykett, Jarkko Kari, Ville Salo
2017 J jnl
Nat. Comput.
Ville Salo, Ilkka Törmä
2017 J jnl
CoRR
Jarkko Peltomäki, Ville Salo
2017 conf
AUTOMATA
Ville Salo
2016 A conf
DISC
Pierre Fraigniaud, Ivan Rapaport, Ville Salo, Ioan Todinca
2016 J jnl
CoRR
Pierre Fraigniaud, Ivan Rapaport, Ville Salo, Ioan Todinca
2016 J jnl
CoRR
Tim Boykett, Jarkko Kari, Ville Salo
2016 J jnl
Theor. Comput. Sci.
Eric Goles, Pedro Montealegre, Ville Salo, Ilkka Törmä
2016 C conf
RC
Tim Boykett, Jarkko Kari, Ville Salo
2016 J jnl
CoRR
Tim Boykett, Jarkko Kari, Ville Salo
2016 conf
Automata
Sebastián Barbieri, Jarkko Kari, Ville Salo
2015 J jnl
CoRR
Ville Salo, Ilkka Törmä
2015 J jnl
Theor. Comput. Sci.
Ville Salo, Ilkka Törmä
2015 J jnl
CoRR
Ville Salo, Ilkka Törmä
2015 conf
Automata
Ville Salo, Ilkka Törmä
2015 conf
Automata
Ville Salo
2015 J jnl
CoRR
Eric Goles Ch., Pedro Montealegre, Ville Salo, Ilkka Törmä
2015 B conf
SIROCCO
Jarkko Kari, Martín Matamala, Ivan Rapaport, Ville Salo
2014 J jnl
J. Cell. Autom.
Ville Salo, Ilkka Törmä
2014 conf
Automata
Ville Salo, Ilkka Törmä
2014 J jnl
CoRR
Ville Salo, Ilkka Törmä
2014 J jnl
CoRR
Ville Salo
2014 conf
Automata
Ville Salo, Ilkka Törmä
2014 J jnl
CoRR
Ville Salo, Ilkka Törmä
2014 J jnl
Fundam. Informaticae
Ville Salo, Ilkka Törmä
2014 J jnl
Theor. Comput. Sci.
Ville Salo
2014 C conf
RC
Jarkko Kari, Ville Salo, Ilkka Törmä
2014 J jnl
CoRR
Jarkko Kari, Ville Salo, Ilkka Törmä
2013 J jnl
CoRR
Ville Salo, Ilkka Törmä
2013 conf
Automata
Ville Salo, Ilkka Törmä
2013 conf
Automata
Ville Salo, Ilkka Törmä
2013 J jnl
CoRR
Ville Salo, Ilkka Törmä
2013 J jnl
Fundam. Informaticae
Ville Salo, Ilkka Törmä
2013 J jnl
CoRR
Ville Salo
2013 J jnl
CoRR
Ville Salo, Ilkka Törmä
2012 J jnl
CoRR
Ville Salo
2012 Misc conf
CSR
Ville Salo
2012 B conf
MFCS
Ville Salo, Ilkka Törmä
2012 J jnl
CoRR
Ville Salo, Ilkka Törmä
2012 C conf
Developments in Language Theory
Ville Salo, Ilkka Törmä
2012 conf
AUTOMATA & JAC
Ville Salo, Ilkka Törmä
2012 conf
AUTOMATA & JAC
Ville Salo
2012 C conf
CiE
Ville Salo, Ilkka Törmä
2012 J jnl
CoRR
Ville Salo, Ilkka Törmä
2012 C conf
LATA
Ville Salo, Ilkka Törmä
2012 conf
AUTOMATA & JAC
Ville Salo, Ilkka Törmä
2011 conf
Algebraic Foundations in Computer Science
Jarkko Kari, Ville Salo
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