Logger
Structured, context-scoped logging with pluggable writers.
Installation
npm install @kavach/loggerBasic Setup
import { getLogger } from '@kavach/logger'
const logger = getLogger(consoleWriter, { level: 'info' })Writers
Writers define where logs go:
const consoleWriter = {
async write(logData) {
console.log(
logData.level,
logData.message,
logData.context,
logData.data
)
}
}Context Scoping
Create child loggers with inherited context:
const logger = getLogger(writer, { level: 'info' })
const authLogger = logger.getContextLogger({
package: '@kavach/auth',
module: 'kavach'
})
const signInLogger = authLogger.getContextLogger({
method: 'signIn'
})
signInLogger.info('User signed in', { userId: '123' })
// Output includes: { package, module, method, userId }Log Levels
const logger = getLogger(writer, { level: 'error' })
logger.error('Error occurred') // ✓ Logged
logger.warn('Warning') // ✓ Logged
logger.info('Info') // ✗ Not logged (filtered)
logger.debug('Debug') // ✗ Not logged
logger.trace('Trace') // ✗ Not logged| Level | Value |
|---|---|
| error | 1 |
| warn | 2 |
| info | 3 |
| debug | 4 |
| trace | 5 |
Log Data Shape
{
level: 'info',
running_on: 'server' | 'browser',
logged_at: '2024-01-01T00:00:00.000Z',
context: { package, module, method, ... },
message: string,
data?: object,
error?: object
}Zero Logger
When no writer is configured, a no-op logger is returned. This means logging adds zero overhead unless explicitly configured.