UNPKG

mira-app-server

Version:

Mira Server - standalone server application using mira-app-core

64 lines 1.96 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.logRingBuffer = exports.LogRingBuffer = void 0; class LogRingBuffer { constructor(capacity = 100) { this.capacity = capacity; this.buffer = []; this.subscribers = new Set(); } /** 追加一条日志并通知订阅者 */ push(level, args) { const line = args.map(arg => formatArg(arg)).join(' '); const entry = { timestamp: new Date().toISOString(), level, line, }; this.buffer.push(entry); if (this.buffer.length > this.capacity) { // 丢弃最旧条目,保持容量 this.buffer.splice(0, this.buffer.length - this.capacity); } // 复制一份再遍历,避免订阅者中再触发 push 造成迭代异常 for (const subscriber of [...this.subscribers]) { try { subscriber(entry); } catch { // 订阅者异常不应影响日志主流程 } } } /** 返回当前缓冲区快照(按时间正序) */ recent() { return [...this.buffer]; } /** 订阅新增日志,返回反订阅函数 */ subscribe(fn) { this.subscribers.add(fn); return () => this.subscribers.delete(fn); } /** 当前条目数(测试 / 诊断用) */ size() { return this.buffer.length; } } exports.LogRingBuffer = LogRingBuffer; function formatArg(arg) { if (arg instanceof Error) { return arg.stack || `${arg.name}: ${arg.message}`; } if (typeof arg === 'object' && arg !== null) { try { return JSON.stringify(arg); } catch { return String(arg); } } return String(arg); } /** 全进程共享单例 */ exports.logRingBuffer = new LogRingBuffer(100); //# sourceMappingURL=LogRingBuffer.js.map