@vvlad1973/simple-logger
v2.3.0
Published
A simple logging utility for JavaScript applications, providing customizable log levels and flexible external logger integration.
Readme
@vvlad1973/simple-logger
A flexible and lightweight logger for Node.js with support for custom levels, bindings, child loggers, and external loggers like Pino.
Installation
npm install @vvlad1973/simple-loggerFeatures
- Log levels: trace, debug, info, warn, error, fatal, silent
- Pretty-printed logs to console
- Optional bindings/context injection (e.g. userId, requestId)
- Optional msgPrefix
- Integration with external loggers (e.g. Pino) or logger factories
- Automatic detection of external logger .child() support
- Supports creating child loggers with merged context
- Function entry/exit logging
Usage
Basic usage
import SimpleLogger from '@vvlad1973/simple-logger';
const logger = new SimpleLogger(null, {
level: 'debug',
msgPrefix: '[MyApp]',
bindings: { service: 'auth' },
});
logger.debug('Debug message');
logger.info({ userId: 123 }, 'User logged in');
logger.warn('Something might be wrong');
logger.error('Something is wrong');
logger.fatal('System failure');Integration with Pino
import pino from 'pino';
import SimpleLogger from '@vvlad1973/simple-logger';
const pinoLogger = pino({
level: 'info'
});
const logger = new SimpleLogger(pinoLogger, {
bindings: { component: 'api' },
msgPrefix: '[API]',
}); // this will create child logger with merged bindings
logger.info({ userId: 42 }, 'User fetched');Or you can use a factory function:
import pino from 'pino';
import SimpleLogger from '@vvlad1973/simple-logger';
const logger = new SimpleLogger(pino, {
bindings: { component: 'api' },
msgPrefix: '[API]',
});
logger.info({ userId: 42 }, 'User fetched');API
new SimpleLogger(externalLogger?: ExternalLogger | LoggerFactory, options?: LoggerOptions)
Creates a new logger instance.
Parameters:
externalLogger – optional:
- An existing logger instance (pino, winston, etc.)
- A factory function (e.g. pino)
options – optional:
- level: Logging level
- bindings: Default context
- msgPrefix: Prefix for messages
- transport: Optional transport (used if logger is a factory)
logger.setLevel(level: LoggerLevel)
Sets the logging level.
logger.getLevel(): LoggerLevel
Returns the current log level.
logger.setExternalLogger(externalLogger, options?)
Replace the underlying logger with a new one and optionally provide options for bindings, prefix, etc.
logger.child(bindings: Record<string, unknown>): SimpleLogger
Creates a child logger with merged bindings.
logger.logFunctionStart(name?: string)
Logs the beginning of a function.
logger.logFunctionEnd(name?: string)
Logs the end of a function.
Logging methods
Each of the following is available as a method:
- trace
- debug
- info
- warn
- error
- fatal
- silent (noop)
Each method accepts:
logger.info(message: string, ...args: unknown[]);
logger.info(context: object, message?: string, ...args: unknown[]);Documentation
More details are available in the ./docs directory.
License
MIT License (including commercial use)
Author
Vladislav Vnukovskiy <[email protected]>
