add loggin

This commit is contained in:
2025-09-07 13:45:11 -04:00
parent 87e05a363d
commit d3d7e268e5
2 changed files with 69 additions and 2 deletions
+1 -1
View File
@@ -1 +1 @@
0.0.12 0.0.13
+68 -1
View File
@@ -49,6 +49,8 @@ import json
import asyncio import asyncio
import glob import glob
import re import re
import logging
import logging.handlers
from pathlib import Path from pathlib import Path
from datetime import datetime, timezone, timedelta from datetime import datetime, timezone, timedelta
from fastapi import FastAPI, HTTPException, BackgroundTasks, Request from fastapi import FastAPI, HTTPException, BackgroundTasks, Request
@@ -67,9 +69,71 @@ import time
# Import TV helpers from your existing module # Import TV helpers from your existing module
from media_date_cache import ( from media_date_cache import (
db_connect, apply_series, parse_imdb_from_path, db_connect, apply_series, parse_imdb_from_path,
_log, _iso_now, SonarrClient _log as _original_log, _iso_now, SonarrClient
) )
# ---------------------------
# Enhanced logging with file support
# ---------------------------
# Global file logger
_file_logger = None
def _setup_file_logging():
"""Setup file logging for NFOGuard"""
global _file_logger
if _file_logger is not None:
return _file_logger
# Create logs directory
log_dir = Path("/app/data/logs")
log_dir.mkdir(parents=True, exist_ok=True)
# Setup rotating file handler
log_file = log_dir / "nfoguard.log"
_file_logger = logging.getLogger("NFOGuard")
_file_logger.setLevel(logging.DEBUG)
# Rotating file handler (10MB max, 5 backups)
file_handler = logging.handlers.RotatingFileHandler(
log_file, maxBytes=10*1024*1024, backupCount=5
)
# Detailed format for file logging
formatter = logging.Formatter(
'[%(asctime)s] %(levelname)s: %(message)s',
datefmt='%Y-%m-%dT%H:%M:%S+00:00'
)
file_handler.setFormatter(formatter)
_file_logger.addHandler(file_handler)
return _file_logger
def _log(level: str, msg: str):
"""Enhanced logging that writes to both console and file"""
# Call original log for console output
_original_log(level, msg)
# Also log to file
try:
file_logger = _setup_file_logging()
if level == "DEBUG":
file_logger.debug(msg)
elif level == "INFO":
file_logger.info(msg)
elif level == "WARNING":
file_logger.warning(msg)
elif level == "ERROR":
file_logger.error(msg)
else:
file_logger.info(f"{level}: {msg}")
except Exception as e:
# Don't let logging errors break the app
print(f"File logging error: {e}")
# Initialize file logging on startup
_setup_file_logging()
# --------------------------- # ---------------------------
# Models # Models
# --------------------------- # ---------------------------
@@ -1086,6 +1150,9 @@ def apply_movie(movie_dir: Path, conn: sqlite3.Connection):
conn.commit() conn.commit()
_log("INFO", f"Processed movie: {movie_dir.name} (source={src_detail or 'unknown'}; preserved={preserve})") _log("INFO", f"Processed movie: {movie_dir.name} (source={src_detail or 'unknown'}; preserved={preserve})")
# Add detailed logging for debugging with searchable format
_log("INFO", f"MOVIE_SUMMARY: imdb={imdb_id} title='{movie_dir.name}' dateadded={dateadded_iso} source={src_detail} preserved={preserve}")
# --------------------------- # ---------------------------
# Batching # Batching
# --------------------------- # ---------------------------