MCP-Turso
by nbbaier
Verified
- src
import { appendFileSync, existsSync, mkdirSync } from "node:fs";
import { dirname, join } from "node:path";
import { fileURLToPath } from "node:url";
import pkg from "../package.json" with { type: "json" };
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
const parentDir = join(__dirname, "..");
const logsDir = join(parentDir, "logs");
export const DEFAULT_LOG_FILE = join(logsDir, `${pkg.name}.log`);
/**
* Formats a log message with timestamp, level, and optional data.
*
* @param level - The log level (INFO, ERROR, DEBUG, etc)
* @param message - The log message text
* @param data - Optional data to include in the log entry
* @returns A formatted log string
*/
function formatLogMessage(
level: string,
message: string,
data?: unknown,
): string {
const timestamp = new Date().toISOString();
const dataStr = data ? `\n${JSON.stringify(data, null, 2)}` : "";
return `[${timestamp}] [${level}] ${message}${dataStr}\n`;
}
/**
* Creates a logger instance that writes to the specified log file.
*
* @param logFile - Path to the log file (defaults to DEFAULT_LOG_FILE)
* @returns A logger object with info, error, and debug methods
*/
/**
* Creates a logger instance that writes log messages to a file.
*
* @param logFile - The path to the log file. Defaults to DEFAULT_LOG_FILE.
* @returns A `logger` object with methods for logging at different levels.
* @returns {Object} `logger` - The logger object.
* @returns {string} `logger.logFile` - The path to the log file.
* @returns {function} `logger.log` - Logs a message with a custom level.
* @returns {function} `logger.info` - Logs an info level message.
* @returns {function} `logger.error` - Logs an error level message.
* @returns {function} `logger.debug` - Logs a debug level message.
*/
export function createLogger(logFile: string = DEFAULT_LOG_FILE) {
const logDir = dirname(logFile);
if (!existsSync(logDir)) mkdirSync(logDir, { recursive: true });
if (!existsSync(logFile)) appendFileSync(logFile, "");
return {
logFile,
log(level: string, message: string, data?: unknown) {
const logMessage = formatLogMessage(level, message, data);
appendFileSync(logFile, logMessage);
},
info(message: string, data?: unknown) {
const logMessage = formatLogMessage("INFO", message, data);
appendFileSync(logFile, logMessage);
},
error(message: string, error?: unknown) {
const logMessage = formatLogMessage("ERROR", message, error);
appendFileSync(logFile, logMessage);
},
debug(message: string, data?: unknown) {
const logMessage = formatLogMessage("DEBUG", message, data);
appendFileSync(logFile, logMessage);
},
};
}
export default createLogger;