import pino from 'pino';
import type { LogLevel, LogFormat } from '../types/index.js';
/**
* Logger options
*/
export interface LoggerOptions {
level?: LogLevel;
format?: LogFormat;
}
/**
* Create a configured pino logger
*/
export function createLogger(options: LoggerOptions = {}): pino.Logger {
const { level = 'info', format = 'json' } = options;
const baseConfig: pino.LoggerOptions = {
level,
};
if (format === 'pretty') {
return pino({
...baseConfig,
transport: {
target: 'pino-pretty',
options: {
colorize: true,
translateTime: 'SYS:standard',
ignore: 'pid,hostname',
},
},
});
}
return pino(baseConfig);
}
/**
* Default logger instance (can be replaced via setLogger)
*/
let logger = createLogger();
/**
* Get the current logger instance
*/
export function getLogger(): pino.Logger {
return logger;
}
/**
* Set a new logger instance
*/
export function setLogger(newLogger: pino.Logger): void {
logger = newLogger;
}
/**
* Convenience methods that use the default logger
*/
export const log = {
debug: (msg: string, obj?: object) => logger.debug(obj, msg),
info: (msg: string, obj?: object) => logger.info(obj, msg),
warn: (msg: string, obj?: object) => logger.warn(obj, msg),
error: (msg: string, obj?: object) => logger.error(obj, msg),
fatal: (msg: string, obj?: object) => logger.fatal(obj, msg),
};