Logger

Structured, context-scoped logging with pluggable writers.

Installation

npm install @kavach/logger

Basic 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
LevelValue
error1
warn2
info3
debug4
trace5

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.

Next Steps

Kavach — Authentication made simple llms.txt