#!/usr/bin/env python3 """ Real-time log viewer for MCP Server """ import os import time import sys from pathlib import Path def follow_logs(log_file="mcp_server.log"): """Follow log file in real-time""" log_path = Path(log_file) if not log_path.exists(): print(f"Log file {log_file} not found. Creating empty file...") log_path.touch() print(f"Following logs from: {log_path.absolute()}") print("Press Ctrl+C to stop") print("-" * 80) # Get initial file size with open(log_path, 'r') as f: f.seek(0, 2) # Go to end of file last_size = f.tell() try: while True: with open(log_path, 'r') as f: f.seek(last_size) new_lines = f.readlines() if new_lines: for line in new_lines: print(line.rstrip()) last_size = f.tell() time.sleep(0.1) # Check every 100ms except KeyboardInterrupt: print("\nStopped following logs") def show_recent_logs(log_file="mcp_server.log", lines=50): """Show recent log lines""" log_path = Path(log_file) if not log_path.exists(): print(f"Log file {log_file} not found.") return with open(log_path, 'r') as f: all_lines = f.readlines() recent_lines = all_lines[-lines:] if len(all_lines) > lines else all_lines print(f"Recent {len(recent_lines)} lines from {log_path.absolute()}:") print("-" * 80) for line in recent_lines: print(line.rstrip()) def main(): if len(sys.argv) > 1: command = sys.argv[1] if command == "follow": log_file = sys.argv[2] if len(sys.argv) > 2 else "mcp_server.log" follow_logs(log_file) elif command == "recent": log_file = sys.argv[2] if len(sys.argv) > 2 else "mcp_server.log" lines = int(sys.argv[3]) if len(sys.argv) > 3 else 50 show_recent_logs(log_file, lines) else: print("Usage:") print(" python view_logs.py follow [log_file] # Follow logs in real-time") print(" python view_logs.py recent [log_file] [lines] # Show recent logs") else: # Default: show recent logs show_recent_logs() if __name__ == "__main__": main()