pretty-logger-js
v1.0.2
Published
Lightweight, customizable Node.js logging module with multiple transports and formatters.
Readme
pretty-logger-js
A lightweight, logging module that provides a plug-in style transmission and formatter.
Features
- Log levels:
debug→info→warn→error→silent - Formatters: plain text, colorized (dev), and JSON (production)
- Transports: Console, File (with rotation), HTTP
- Child loggers: inherit config, add scoped metadata
- Runtime control: change level or add/remove transports on the fly
- No external dependencies
Quick start
const { logger } = require('./pretty-logger-js');
logger.info('Server started', { port: 3000 });
logger.warn('High memory', { mb: 512 });
logger.error('DB failed', { host: 'localhost' });Set the minimum level via the LOG_LEVEL environment variable (default: info):
LOG_LEVEL=debug node app.jsCustom logger
const {
Logger,
createConsoleTransport,
createFileTransport,
colorFormatter,
jsonFormatter,
} = require('./pretty-logger-js');
const logger = new Logger({
level: 'debug',
name: 'my-app', // added to every log entry's meta
transports: [
createConsoleTransport({ formatter: colorFormatter }),
createFileTransport({
filePath: './logs/app.log',
formatter: jsonFormatter,
maxBytes: 10 * 1024 * 1024, // 10 MB → then rotate
maxFiles: 5, // keep 5 rotated files
}),
],
});Child loggers
Inherit all settings but inject extra metadata into every entry:
// In your request middleware:
const reqLogger = logger.child({ requestId: req.id, userId: req.user.id });
reqLogger.info('Request received', { method: req.method, path: req.path });
// → meta always contains requestId and userIdHTTP transport
Send logs to an external endpoint (e.g. a log aggregator):
const { createHttpTransport } = require('./pretty-logger-js');
const logger = new Logger({
transports: [
createHttpTransport({
url: 'https://logs.example.com/ingest',
headers: { Authorization: 'Bearer MY_TOKEN' },
levels: ['error', 'warn'], // only send errors and warnings
timeout: 3000,
}),
],
});Runtime control
// Silence all logs (e.g. in tests)
logger.setLevel('silent');
// Re-enable
logger.setLevel('info');
// Add a transport after creation
logger.addTransport(createFileTransport({ filePath: './debug.log' }));
// Remove a transport by name
logger.removeTransport('file');Formatters
| Formatter | Output | Best for |
|------------------|---------------------------------------------------------------------|---------------|
| colorFormatter | [timestamp] [INFO ] message {"key":"value"} (ANSI colors) | Dev console |
| plainFormatter | [timestamp] [INFO ] message {"key":"value"} (no color) | File output |
| jsonFormatter | {"timestamp":"...","level":"info","message":"...","meta":{...}} | Production / log aggregators |
Custom formatter
A formatter is just a function — write your own:
function myFormatter(level, message, meta) {
return `${level.toUpperCase()} | ${message} | ${JSON.stringify(meta)}`;
}
createConsoleTransport({ formatter: myFormatter });API reference
new Logger(options)
| Option | Type | Default | Description |
|---------------|------------|-----------|------------------------------------------|
| level | string | 'info' | Minimum level to emit |
| transports | array | [] | Transport objects |
| defaultMeta | object | {} | Merged into every log entry's meta |
| name | string | — | Added as meta.logger |
logger.log(level, message, meta?)
logger.debug/info/warn/error(message, meta?)
logger.child(meta) → Logger
logger.setLevel(level)
logger.addTransport(transport)
logger.removeTransport(name)
File structure
pretty-logger-js/
index.js ← public API + default instance
logger.js ← Logger class
formatter.js ← plain, color, JSON formatters
transports/
console.js ← stdout/stderr transport
file.js ← file transport with rotation
http.js ← HTTP/HTTPS POST transport
examples/
basic.js ← simple usage
advanced.js ← full feature demo
README.md
package.jsonRunning the examples
node examples/basic.js
node examples/advanced.jsLogs written to files will appear in ./logs/.
License
MIT
