Skip to main content
Glama
larksuite

Feishu/Lark OpenAPI MCP

Official
by larksuite
logger.ts2.53 kB
import fs from 'fs'; import path from 'path'; import { ENV_PATHS } from './constants'; import { currentVersion } from './version'; export enum LogLevel { ERROR = 1, WARN = 2, INFO = 3, DEBUG = 4, } export class Logger { private level: LogLevel = LogLevel.WARN; static logFilesToKeep = 7; static logFilePrefix = 'lark-mcp-'; constructor() { this.initLogFile(); this.cleanHistoryLogFile(); } get logFileName() { return `${Logger.logFilePrefix}${new Date().toISOString().split('T')[0]}.log`; } initLogFile = () => { if (!fs.existsSync(ENV_PATHS.log)) { fs.mkdirSync(ENV_PATHS.log, { recursive: true }); } }; cleanHistoryLogFile = () => { try { // clean old log files, 7 days ago const logFiles = fs .readdirSync(ENV_PATHS.log) .filter((file) => file.startsWith(Logger.logFilePrefix) && file.endsWith('.log')); const logFilesToDelete = logFiles.filter((file) => { const fileDate = file.split('-')[1].split('.')[0]; const fileDateObj = new Date(fileDate); return fileDateObj < new Date(Date.now() - Logger.logFilesToKeep * 24 * 60 * 60 * 1000); }); for (const file of logFilesToDelete) { try { fs.unlinkSync(path.join(ENV_PATHS.log, file)); } catch (error) { console.error(`Failed to delete log file: ${error}`); } } } catch (error) { console.error(`Failed to clean history log file: ${error}`); } }; setLevel = (level: LogLevel) => { this.level = level; }; log = (message: string) => { try { fs.appendFileSync( path.join(ENV_PATHS.log, this.logFileName), `[${new Date().toISOString()}] [${currentVersion}] [${process.pid}] ${message}\n`, ); } catch (error) { console.error(`Failed to write log: ${error} ${message}`); } }; debug = (message: string) => { if (this.level < LogLevel.DEBUG) { return; } this.log(`[DEBUG] ${message}`); }; info = (message: string) => { if (this.level < LogLevel.INFO) { return; } this.log(`[INFO] ${message}`); }; warn = (message: string) => { if (this.level < LogLevel.WARN) { return; } console.error(`[WARN] ${message}`); this.log(`[WARN] ${message}`); }; error = (message: string) => { if (this.level < LogLevel.ERROR) { return; } console.error(`[ERROR] ${message}`); this.log(`[ERROR] ${message}`); }; } export const logger = new Logger();

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/larksuite/lark-openapi-mcp'

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