Gemini
feat: add detailed logging
01d5a5d
import os
import sys
import logging
import logging.config
import logging.handlers
import datetime
import shutil
# Get project root directory
PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))
# Define log directories
LOG_BASE_DIR = os.path.join(PROJECT_ROOT, "logs")
TRAIN_LOG_DIR = os.path.join(LOG_BASE_DIR, "train")
# Define log file paths
APP_LOG_FILE = os.path.join(LOG_BASE_DIR, "app.log")
TRAIN_LOG_FILE = os.path.join(TRAIN_LOG_DIR, "train.log")
# Function to rename log file if it exists
def rename_existing_log_file():
if os.path.exists(TRAIN_LOG_FILE):
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
backup_filename = f"train_{timestamp}.log"
backup_path = os.path.join(TRAIN_LOG_DIR, backup_filename)
shutil.move(TRAIN_LOG_FILE, backup_path)
print(f"Existing train.log renamed to {backup_filename}")
return True
return False
LOGGING_CONFIG = {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"standard": {
"format": "%(asctime)s [%(levelname)s] %(filename)s:%(lineno)d - %(message)s",
"datefmt": "%Y-%m-%d %H:%M:%S",
}
},
"handlers": {
"console": {
"class": "logging.StreamHandler",
"level": "INFO",
"formatter": "standard",
"stream": sys.stdout,
},
"file": {
"class": "logging.handlers.RotatingFileHandler",
"level": "INFO",
"formatter": "standard",
"filename": APP_LOG_FILE,
"maxBytes": 10485760, # 10MB
"backupCount": 5,
"encoding": "utf-8",
},
"train_process_file": {
"class": "logging.handlers.RotatingFileHandler",
"level": "INFO",
"formatter": "standard",
"filename": TRAIN_LOG_FILE,
"maxBytes": 10485760, # 10MB
"backupCount": 5,
"encoding": "utf-8",
},
},
"loggers": {
"train_process": {
"level": "INFO",
"handlers": ["train_process_file", "console"],
"propagate": False,
},
},
"root": { # root logger configuration
"level": "INFO",
"handlers": ["console", "file"],
},
}
# Initialize logging configuration
def setup_logging():
logging.config.dictConfig(LOGGING_CONFIG)
# Get train process logger
def get_train_process_logger():
return logging.getLogger("train_process")