Nalini Schaduangrat

19 papers Journal 19
YearRankTypeTitle / Venue / Authors
2025 J jnl
Comput. Biol. Chem.
Watshara Shoombuatong, Saeed Ahmed, S. M. Hasan Mahmud, Nalini Schaduangrat
2025 J jnl
IEEE Access
Watshara Shoombuatong, Nalini Schaduangrat, Lawankorn Mookdarsanit, S. M. Hasan Mahmud, Kanthida Kusonmano, Pakpoom Mookdarsanit
2025 J jnl
IEEE Trans. Comput. Biol. Bioinform.
Saeed Ahmed, Nalini Schaduangrat, Ittipat Meewan, Watshara Shoombuatong
2025 J jnl
Comput. Biol. Medicine
Ittipat Meewan, Nalini Schaduangrat, Lawankorn Mookdarsanit, Pakpoom Mookdarsanit, Watshara Shoombuatong
2025 J jnl
Future Gener. Comput. Syst.
Phasit Charoenkwan, Nalini Schaduangrat, Le Thi Phan, Balachandran Manavalan, Watshara Shoombuatong
2025 J jnl
BMC Bioinform.
Nalini Schaduangrat, Hathaichanok Chuntakaruk, Thanyada Rungrotmongkol, Pakpoom Mookdarsanit, Watshara Shoombuatong
2025 J jnl
IEEE Trans. Comput. Biol. Bioinform.
Phasit Charoenkwan, Nalini Schaduangrat, Mohammad Ali Moni, Watshara Shoombuatong
2024 J jnl
Briefings Bioinform.
Dong Gao, Liping Ren, Yu-Duo Hao, Nalini Schaduangrat, Xiao-Wei Liu, Shi-Shi Yuan, Yu-He Yang, Yan Wang, Watshara Shoombuatong, Hui Ding
2023 J jnl
J. Cheminformatics
Nalini Schaduangrat, Nuttapat Anuwongcharoen, Phasit Charoenkwan, Watshara Shoombuatong
2023 J jnl
Comput. Biol. Medicine
Phasit Charoenkwan, Pramote Chumnanpuen, Nalini Schaduangrat, Changmin Oh, Balachandran Manavalan, Watshara Shoombuatong
2023 J jnl
BMC Bioinform.
Phasit Charoenkwan, Nalini Schaduangrat, Watshara Shoombuatong
2023 J jnl
BMC Bioinform.
Phasit Charoenkwan, Sasikarn Kongsompong, Nalini Schaduangrat, Pramote Chumnanpuen, Watshara Shoombuatong
2022 J jnl
J. Comput. Aided Mol. Des.
Phasit Charoenkwan, Pramote Chumnanpuen, Nalini Schaduangrat, Pietro Lio', Mohammad Ali Moni, Watshara Shoombuatong
2022 J jnl
Comput. Biol. Medicine
Phasit Charoenkwan, Nalini Schaduangrat, Pietro Lio', Mohammad Ali Moni, Balachandran Manavalan, Watshara Shoombuatong
2022 J jnl
Comput. Biol. Medicine
Phasit Charoenkwan, Nalini Schaduangrat, Mohammad Ali Moni, Pietro Lio', Balachandran Manavalan, Watshara Shoombuatong
2020 J jnl
J. Comput. Chem.
Aijaz Ahmad Malik, Chuleeporn Phanus-umporn, Nalini Schaduangrat, Watshara Shoombuatong, Chartchalerm Isarankura-Na-Ayudhya, Chanin Nantasenamat
2020 J jnl
Bioinform.
Md. Mehedi Hasan, Nalini Schaduangrat, Shaherin Basith, Gwang Lee, Watshara Shoombuatong, Balachandran Manavalan
2020 J jnl
J. Cheminformatics
Nalini Schaduangrat, Samuel Lampa, Saw Simeon, Matthew Paul Gleeson, Ola Spjuth, Chanin Nantasenamat
2019 J jnl
Comput. Biol. Chem.
Watshara Shoombuatong, Nalini Schaduangrat, Reny Pratiwi, Chanin Nantasenamat
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