Aniworld/docs/logging.md
Lukas 94c53e9555 feat: Add comprehensive logging system with console and file output
- Create logging infrastructure in src/infrastructure/logging/
  - logger.py: Main logging setup with console and file handlers
  - uvicorn_config.py: Custom uvicorn logging configuration
  - __init__.py: Export public logging API

- Update FastAPI application to use logging
  - Replace all print() statements with proper logger calls
  - Initialize logging during application startup
  - Add detailed startup/shutdown logging

- Add startup scripts
  - run_server.py: Python script with uvicorn logging config
  - start_server.sh: Bash wrapper script

- Add comprehensive documentation
  - docs/logging.md: User guide for logging system
  - docs/logging_implementation_summary.md: Technical implementation details

Features:
- Console logging with clean, readable format
- File logging with timestamps to logs/fastapi_app.log
- Configurable log level via LOG_LEVEL environment variable
- Proper lazy formatting for performance
- Captures all uvicorn, application, and module logs
- Automatic log directory creation
2025-10-25 17:40:20 +02:00

3.9 KiB

Logging Configuration

This document describes the logging setup for the Aniworld FastAPI application.

Overview

The application uses Python's built-in logging module with both console and file output. All logs are written to:

  • Console: Colored output for development
  • Log File: logs/fastapi_app.log with detailed timestamps

Log Levels

By default, the application logs at INFO level. You can change this by setting the LOG_LEVEL environment variable:

export LOG_LEVEL=DEBUG  # More verbose
export LOG_LEVEL=INFO   # Default
export LOG_LEVEL=WARNING  # Less verbose
export LOG_LEVEL=ERROR  # Errors only

Or in your .env file:

LOG_LEVEL=INFO

Running the Server

conda run -n AniWorld python run_server.py

This script uses the custom uvicorn logging configuration that ensures proper console and file logging.

Option 2: Using the shell script

./start_server.sh

Option 3: Using uvicorn directly

conda run -n AniWorld python -m uvicorn src.server.fastapi_app:app --host 127.0.0.1 --port 8000 --reload

Note: When using conda run, console output may not be visible in real-time. The logs will still be written to the file.

Log File Location

All logs are written to: logs/fastapi_app.log

To view logs in real-time:

tail -f logs/fastapi_app.log

Log Format

Console Output

INFO:     Starting FastAPI application...
INFO:     Server running on http://127.0.0.1:8000

File Output

2025-10-25 17:31:19 - aniworld - INFO - Starting FastAPI application...
2025-10-25 17:31:19 - aniworld - INFO - Server running on http://127.0.0.1:8000

What Gets Logged

The application logs:

  • Startup/Shutdown: Application lifecycle events
  • Configuration: Loaded settings and configuration
  • HTTP Requests: Via uvicorn.access logger
  • Errors: Exception tracebacks with full context
  • WebSocket Events: Connection/disconnection events
  • Download Progress: Progress updates for anime downloads
  • File Operations: File creation, deletion, scanning

Logger Names

Different parts of the application use different logger names:

  • aniworld: Main application logger
  • uvicorn.error: Uvicorn server errors
  • uvicorn.access: HTTP request logs
  • src.core.SeriesApp: Core anime logic
  • src.core.SerieScanner: File scanning operations
  • src.server.*: Web API endpoints and services

Programmatic Usage

To use logging in your code:

from src.infrastructure.logging import get_logger

logger = get_logger(__name__)

logger.info("This is an info message")
logger.warning("This is a warning")
logger.error("This is an error", exc_info=True)  # Includes traceback

Log Rotation

Log files can grow large over time. Consider implementing log rotation:

# Archive old logs
mkdir -p logs/archived
mv logs/fastapi_app.log logs/archived/fastapi_app_$(date +%Y%m%d_%H%M%S).log

Or use Python's RotatingFileHandler (can be added to src/infrastructure/logging/logger.py).

Troubleshooting

No console output when using conda run

This is a known limitation of conda run. The logs are still being written to the file. To see console output:

  1. Use the log file: tail -f logs/fastapi_app.log
  2. Or run without conda: python run_server.py (after activating environment with conda activate AniWorld)

Log file not created

  • Check that the logs/ directory exists (it's created automatically)
  • Verify write permissions on the logs/ directory
  • Check the LOG_LEVEL environment variable

Too much logging

Set a higher log level:

export LOG_LEVEL=WARNING

Missing logs

  • Check that you're using the logger, not print()
  • Verify the log level is appropriate for your messages
  • Ensure the logger is properly configured (should happen automatically on startup)