@vibeworks/barkme-mcp-server
Version:
A Model Context Protocol (MCP) server that provides iOS push notifications through the Bark service
85 lines (84 loc) • 2.77 kB
JavaScript
/**
* Simple structured logging for BarkMe MCP server
*/
class Logger {
level;
constructor() {
this.level = process.env.LOG_LEVEL || 'info';
}
shouldLog(level) {
const levels = ['debug', 'info', 'warn', 'error'];
return levels.indexOf(level) >= levels.indexOf(this.level);
}
formatMessage(level, message, context) {
const timestamp = new Date().toISOString();
const prefix = {
debug: '[DEBUG]',
info: '[INFO]',
warn: '[WARN]',
error: '[ERROR]'
}[level];
const base = `${timestamp} ${prefix} ${message}`;
if (context && Object.keys(context).length > 0) {
const contextStr = JSON.stringify(context, null, 2);
return `${base}\n${contextStr}`;
}
return base;
}
debug(message, context) {
if (this.shouldLog('debug')) {
console.error(this.formatMessage('debug', message, context));
}
}
info(message, context) {
if (this.shouldLog('info')) {
console.error(this.formatMessage('info', message, context));
}
}
warn(message, context) {
if (this.shouldLog('warn')) {
console.error(this.formatMessage('warn', message, context));
}
}
error(message, errorOrContext) {
if (this.shouldLog('error')) {
let context = {};
if (errorOrContext instanceof Error) {
context = {
error: errorOrContext.message,
stack: errorOrContext.stack,
};
}
else if (errorOrContext) {
context = errorOrContext;
}
console.error(this.formatMessage('error', message, context));
}
}
child(defaultContext) {
const parent = this;
return {
debug(message, context) {
parent.debug(message, { ...defaultContext, ...context });
},
info(message, context) {
parent.info(message, { ...defaultContext, ...context });
},
warn(message, context) {
parent.warn(message, { ...defaultContext, ...context });
},
error(message, errorOrContext) {
if (errorOrContext instanceof Error) {
parent.error(message, errorOrContext);
}
else {
parent.error(message, { ...defaultContext, ...errorOrContext });
}
},
child(additionalContext) {
return parent.child({ ...defaultContext, ...additionalContext });
}
};
}
}
export const logger = new Logger();