Skip to main content
Glama

watch_log_file

Monitor log files in real-time to detect errors and issues as they occur, enabling prompt debugging and analysis.

Instructions

Start monitoring a log file for real-time error detection

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filePathYesPath to the log file to monitor
pollIntervalNoPolling interval in milliseconds

Implementation Reference

  • MCP server-side handler for the 'watch_log_file' tool. Validates input arguments and delegates to FileWatcher.watchLogFile to start monitoring the log file.
    private async handleWatchLogFile(args: any): Promise<MCPToolResult> { const { filePath, pollInterval = 1000 } = args; if (!filePath || typeof filePath !== 'string') { throw new Error('filePath is required and must be a string'); } await this.fileWatcher.watchLogFile(filePath, { pollInterval }); return { success: true, data: { message: `Started watching ${filePath}`, filePath, pollInterval } }; }
  • Core helper function implementing log file watching using chokidar. Sets up polling watcher, handles file changes by analyzing new content for errors with LogAnalyzer, tracks errors per file.
    async watchLogFile(filePath: string, options: WatchOptions = {}): Promise<void> { // Validate file path first const validation = await LogUtils.validateFilePath(filePath); if (!validation.valid) { throw new Error(`Cannot watch file: ${validation.error}`); } // Stop existing watcher if present if (this.watchers.has(filePath)) { await this.stopWatching(filePath); } const watchOptions: WatchOptions = { pollInterval: options.pollInterval || 1000, ignoreInitial: options.ignoreInitial ?? false, usePolling: options.usePolling ?? true }; // Get initial file size const stats = await fs.stat(filePath); const initialSize = stats.size; // Create watcher const watcher = chokidar.watch(filePath, { ignoreInitial: watchOptions.ignoreInitial, usePolling: watchOptions.usePolling, interval: watchOptions.pollInterval }); const watchedFile: WatchedFile = { filePath, watcher, lastSize: initialSize, errors: [], lastUpdate: new Date(), options: watchOptions }; // Set up event handlers watcher.on('change', async (path) => { await this.handleFileChange(path); }); watcher.on('error', (error) => { console.error(`File watcher error for ${filePath}:`, error); }); this.watchers.set(filePath, watchedFile); // Process initial content if not ignoring initial if (!watchOptions.ignoreInitial) { await this.handleFileChange(filePath); } }
  • src/server.ts:103-121 (registration)
    Registration of the 'watch_log_file' tool in the ListToolsRequestSchema handler, including name, description, and input schema definition.
    { name: 'watch_log_file', description: 'Start monitoring a log file for real-time error detection', inputSchema: { type: 'object', properties: { filePath: { type: 'string', description: 'Path to the log file to monitor' }, pollInterval: { type: 'number', default: 1000, description: 'Polling interval in milliseconds' } }, required: ['filePath'] } },
  • Input schema definition for the 'watch_log_file' tool, specifying required filePath and optional pollInterval.
    inputSchema: { type: 'object', properties: { filePath: { type: 'string', description: 'Path to the log file to monitor' }, pollInterval: { type: 'number', default: 1000, description: 'Polling interval in milliseconds' } }, required: ['filePath'] } },
  • Dispatch switch case in CallToolRequestSchema handler that routes 'watch_log_file' calls to the specific handler.
    case 'watch_log_file': result = await this.handleWatchLogFile(args);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ChiragPatankar/loganalyzer-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server