Skip to main content
Glama
log-entry.entity.ts2.81 kB
import { Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, Index, ManyToOne, JoinColumn, } from 'typeorm'; import { MCPServerEntity } from './mcp-server.entity'; export enum LogLevel { DEBUG = 'debug', INFO = 'info', WARN = 'warn', ERROR = 'error', FATAL = 'fatal', } export enum LogSource { SYSTEM = 'system', MCP_SERVER = 'mcp_server', API = 'api', TOOL_EXECUTION = 'tool_execution', AUTH = 'auth', DATABASE = 'database', HEALTH_CHECK = 'health_check', } @Entity('log_entries') @Index(['level']) @Index(['source']) @Index(['serverId']) @Index(['timestamp']) @Index(['level', 'timestamp']) export class LogEntryEntity { @PrimaryGeneratedColumn('uuid') id: string; @Column({ type: 'enum', enum: LogLevel, default: LogLevel.INFO, }) level: LogLevel; @Column({ type: 'enum', enum: LogSource, default: LogSource.SYSTEM, }) source: LogSource; @Column({ type: 'text' }) message: string; @Column({ type: 'jsonb', nullable: true }) context?: { userId?: string; requestId?: string; toolName?: string; endpoint?: string; method?: string; statusCode?: number; duration?: number; error?: { name: string; message: string; stack?: string; }; [key: string]: any; }; @Column({ type: 'jsonb', nullable: true }) metadata?: { userAgent?: string; ip?: string; correlationId?: string; sessionId?: string; [key: string]: any; }; @Column({ type: 'uuid', nullable: true }) serverId?: string; @ManyToOne(() => MCPServerEntity, { onDelete: 'SET NULL' }) @JoinColumn({ name: 'serverId' }) server?: MCPServerEntity; @Column({ type: 'varchar', length: 100, nullable: true }) component?: string; // 组件名称,如 'MCPService', 'OpenAPIController' 等 @Column({ type: 'varchar', length: 100, nullable: true }) operation?: string; // 操作名称,如 'createServer', 'executeTools' 等 @Column({ type: 'text', nullable: true }) stackTrace?: string; @Column({ type: 'jsonb', nullable: true }) tags?: string[]; @CreateDateColumn({ name: 'timestamp' }) timestamp: Date; // 虚拟属性:是否为错误日志 get isError(): boolean { return this.level === LogLevel.ERROR || this.level === LogLevel.FATAL; } // 虚拟属性:是否为警告或更严重 get isWarningOrAbove(): boolean { return [LogLevel.WARN, LogLevel.ERROR, LogLevel.FATAL].includes(this.level); } // 虚拟属性:格式化的时间戳 get formattedTimestamp(): string { return this.timestamp.toISOString(); } // 虚拟属性:简短消息(用于列表显示) get shortMessage(): string { return this.message.length > 100 ? this.message.substring(0, 100) + '...' : this.message; } }

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/zaizaizhao/mcp-swagger-server'

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