@platformos/pos-cli
Version:
Manage your platformOS application
65 lines (56 loc) • 1.46 kB
JavaScript
// Unified logging for mcp-min
// - Never writes to stdout (safe for stdio JSON-RPC transport)
// - Writes to file + stderr
// - debug() gated on DEBUG/MCP_MIN_DEBUG flags
import { mkdirSync, appendFileSync } from 'fs';
import { homedir } from 'os';
import path from 'path';
import { DEBUG } from './config.js';
const LOG_DIR = path.join(homedir(), '.pos-cli', 'logs');
const LOG_FILE = process.env.MCP_MIN_LOG_FILE || path.join(LOG_DIR, 'mcp-min.log');
let logReady = false;
function init() {
if (logReady) return;
try {
mkdirSync(path.dirname(LOG_FILE), { recursive: true });
logReady = true;
} catch {
// ignore - logging is best-effort
}
}
function write(level, message, data) {
const ts = new Date().toISOString();
const suffix = data !== undefined ? ` ${JSON.stringify(data)}` : '';
const line = `[${level} ${ts}] ${message}${suffix}\n`;
// Always write to stderr (never stdout)
try {
process.stderr.write(line);
} catch {
// best-effort
}
// Write to log file
init();
if (logReady) {
try {
appendFileSync(LOG_FILE, line);
} catch {
// best-effort
}
}
}
const log = {
debug(message, data) {
if (DEBUG) write('DEBUG', message, data);
},
info(message, data) {
write('INFO', message, data);
},
warn(message, data) {
write('WARN', message, data);
},
error(message, data) {
write('ERROR', message, data);
},
LOG_FILE
};
export default log;