Skip to main content
Glama
logger.test.ts2.77 kB
import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest'; import { createLogger, SimpleLogger } from '../logger.js'; describe('Logger', () => { const originalEnv = process.env.LOG_LEVEL; const consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); const consoleWarnSpy = vi.spyOn(console, 'warn').mockImplementation(() => {}); const consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => {}); beforeEach(() => { vi.clearAllMocks(); }); afterEach(() => { process.env.LOG_LEVEL = originalEnv; }); test('creates logger with default info level', () => { const logger = createLogger('test'); expect(logger).toBeInstanceOf(SimpleLogger); }); test('respects LOG_LEVEL environment variable', () => { process.env.LOG_LEVEL = 'debug'; const logger = createLogger('test'); logger.debug('debug message'); expect(consoleLogSpy).toHaveBeenCalled(); }); test('formats messages with timestamp and level', () => { const logger = createLogger('test-logger', 'error'); logger.error('test error'); expect(consoleErrorSpy).toHaveBeenCalled(); const call = consoleErrorSpy.mock.calls[0][0]; expect(call).toMatch(/\[\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z\]/); expect(call).toContain('[ERROR]'); expect(call).toContain('[test-logger]'); expect(call).toContain('test error'); }); test('respects log level hierarchy', () => { const logger = createLogger('test', 'warn'); logger.error('error'); // Should log logger.warn('warn'); // Should log logger.info('info'); // Should NOT log logger.debug('debug'); // Should NOT log expect(consoleErrorSpy).toHaveBeenCalledTimes(1); expect(consoleWarnSpy).toHaveBeenCalledTimes(1); expect(consoleLogSpy).not.toHaveBeenCalled(); }); test('passes additional arguments', () => { const logger = createLogger('test', 'error'); const error = new Error('test error'); const data = { foo: 'bar' }; logger.error('Error occurred', error, data); expect(consoleErrorSpy).toHaveBeenCalled(); expect(consoleErrorSpy).toHaveBeenCalledWith( expect.stringContaining('Error occurred'), error, data ); }); test('all log levels work correctly', () => { const logger = createLogger('test', 'debug'); logger.error('error message'); expect(consoleErrorSpy).toHaveBeenCalledTimes(1); logger.warn('warn message'); expect(consoleWarnSpy).toHaveBeenCalledTimes(1); logger.info('info message'); expect(consoleLogSpy).toHaveBeenCalledTimes(1); logger.debug('debug message'); expect(consoleLogSpy).toHaveBeenCalledTimes(2); }); });

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/davstr1/peekabooMCP'

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