diff --git a/src/ftp_csv_receiver.py b/src/ftp_csv_receiver.py index aae7faf..6fd0050 100755 --- a/src/ftp_csv_receiver.py +++ b/src/ftp_csv_receiver.py @@ -7,6 +7,7 @@ managing virtual users and handling CSV file uploads. import logging import os from hashlib import sha256 +from logging.handlers import RotatingFileHandler from pathlib import Path from pyftpdlib.handlers import FTPHandler @@ -103,6 +104,39 @@ class ASEHandler(FTPHandler): return user_admin.ftp_SITE_LSTU(self, line) +def setup_logging(log_filename: str): + """ + Configura il logging per il server FTP con rotation e output su console. + + Args: + log_filename (str): Percorso del file di log. + """ + root_logger = logging.getLogger() + formatter = logging.Formatter("%(asctime)s - PID: %(process)d.%(name)s.%(levelname)s: %(message)s") + + # Rimuovi eventuali handler esistenti + if root_logger.hasHandlers(): + root_logger.handlers.clear() + + # Handler per file con rotation (max 10MB per file, mantiene 5 backup) + file_handler = RotatingFileHandler( + log_filename, + maxBytes=10 * 1024 * 1024, # 10 MB + backupCount=5, # Mantiene 5 file di backup + encoding="utf-8" + ) + file_handler.setFormatter(formatter) + root_logger.addHandler(file_handler) + + # Handler per console (utile per Docker) + console_handler = logging.StreamHandler() + console_handler.setFormatter(formatter) + root_logger.addHandler(console_handler) + + root_logger.setLevel(logging.INFO) + root_logger.info("Logging FTP configurato con rotation (10MB, 5 backup) e console output") + + def main(): """Main function to start the FTP server.""" # Load the configuration settings @@ -110,11 +144,7 @@ def main(): try: # Configure logging first - logging.basicConfig( - format="%(asctime)s - PID: %(process)d.%(name)s.%(levelname)s: %(message)s ", - filename=cfg.logfilename, - level=logging.INFO, - ) + setup_logging(cfg.logfilename) # Initialize the authorizer with database support # This authorizer checks the database on every login, ensuring