Examples
Working examples for @gasket/plugin-logger methods, actions, and utilities.
Plugin Setup
// gasket.js
import { makeGasket } from '@gasket/core';
import pluginLogger from '@gasket/plugin-logger';
export default makeGasket({
plugins: [
pluginLogger
]
});
Actions
getLogger
Get the logger instance that was set up during initialization.
// Using the action
const logger = gasket.actions.getLogger();
logger.info('Application started');
logger.error('Something went wrong');
Lifecycle Hooks
createLogger
Hook to provide a custom logger implementation. Must be synchronous and return a logger object.
// custom-logger-plugin.js
export default {
name: 'custom-logger-plugin',
hooks: {
createLogger() {
return {
debug: (msg) => console.log(`[DEBUG] ${msg}`),
info: (msg) => console.log(`[INFO] ${msg}`),
warn: (msg) => console.log(`[WARN] ${msg}`),
error: (msg) => console.log(`[ERROR] ${msg}`),
child: (metadata) => ({
debug: (msg) => console.log(`[DEBUG] ${msg}`, metadata),
info: (msg) => console.log(`[INFO] ${msg}`, metadata),
warn: (msg) => console.log(`[WARN] ${msg}`, metadata),
error: (msg) => console.log(`[ERROR] ${msg}`, metadata),
child: (meta) => this.child({ ...metadata, ...meta })
})
};
}
}
};
Using the Logger
Once the logger is set up, it's available on the gasket instance:
// In any lifecycle hook or action
export default {
name: 'example-plugin',
hooks: {
express(gasket, app) {
// Use the logger
gasket.logger.info('Setting up Express routes');
app.get('/health', (req, res) => {
gasket.logger.debug('Health check requested');
res.json({ status: 'ok' });
});
// Create child logger with context
const requestLogger = gasket.logger.child({
component: 'express-setup'
});
requestLogger.info('Express configured successfully');
}
}
};
Built-in Logger Methods
The default logger provides all standard logging methods and child logger creation:
// Basic logging
gasket.logger.debug('Debug message');
gasket.logger.info('Info message');
gasket.logger.warn('Warning message');
gasket.logger.error('Error message');
// Create child logger with metadata
const childLogger = gasket.logger.child({
component: 'auth',
userId: '12345'
});
childLogger.info('User logged in');
// Output includes metadata automatically
// Chain child loggers for more specific context
const requestLogger = childLogger.child({
requestId: 'req-abc123'
});
requestLogger.error('Request failed');
// Output includes both component, userId, and requestId metadata
Logger with Close Functionality
// persistent-logger-plugin.js
import fs from 'fs';
export default {
name: 'persistent-logger-plugin',
hooks: {
createLogger() {
const logStream = fs.createWriteStream('app.log', { flags: 'a' });
return {
debug: (msg) => logStream.write(`[DEBUG] ${new Date().toISOString()} ${msg}\n`),
info: (msg) => logStream.write(`[INFO] ${new Date().toISOString()} ${msg}\n`),
warn: (msg) => logStream.write(`[WARN] ${new Date().toISOString()} ${msg}\n`),
error: (msg) => logStream.write(`[ERROR] ${new Date().toISOString()} ${msg}\n`),
child: (metadata) => ({
debug: (msg) => logStream.write(`[DEBUG] ${new Date().toISOString()} ${msg} ${JSON.stringify(metadata)}\n`),
info: (msg) => logStream.write(`[INFO] ${new Date().toISOString()} ${msg} ${JSON.stringify(metadata)}\n`),
warn: (msg) => logStream.write(`[WARN] ${new Date().toISOString()} ${msg} ${JSON.stringify(metadata)}\n`),
error: (msg) => logStream.write(`[ERROR] ${new Date().toISOString()} ${msg} ${JSON.stringify(metadata)}\n`),
child: (meta) => this.child({ ...metadata, ...meta })
}),
close: async () => {
return new Promise((resolve) => {
logStream.end(resolve);
});
}
};
}
}
};