add loggin
This commit is contained in:
+68
-1
@@ -49,6 +49,8 @@ import json
|
||||
import asyncio
|
||||
import glob
|
||||
import re
|
||||
import logging
|
||||
import logging.handlers
|
||||
from pathlib import Path
|
||||
from datetime import datetime, timezone, timedelta
|
||||
from fastapi import FastAPI, HTTPException, BackgroundTasks, Request
|
||||
@@ -67,9 +69,71 @@ import time
|
||||
# Import TV helpers from your existing module
|
||||
from media_date_cache import (
|
||||
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
|
||||
# ---------------------------
|
||||
@@ -1086,6 +1150,9 @@ def apply_movie(movie_dir: Path, conn: sqlite3.Connection):
|
||||
conn.commit()
|
||||
_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
|
||||
# ---------------------------
|
||||
|
||||
Reference in New Issue
Block a user