Skip to content

Console Transport Browser Server Deno Bun

The simplest integration is with the built-in console object, which is available in both Node.js and browser environments.

Transport Source

Installation

No additional packages needed beyond the core loglayer package:

sh
npm i loglayer
sh
pnpm add loglayer
sh
yarn add loglayer

Setup

typescript
import { LogLayer, ConsoleTransport } from 'loglayer'

const log = new LogLayer({
  transport: new ConsoleTransport({
    logger: console,
    // Optional: control where object data appears in log messages
    appendObjectData: false // default: false - object data appears first
  })
})

Configuration Options

Required Parameters

None - all parameters are optional.

Optional Parameters

NameTypeDefaultDescription
level"trace" | "debug" | "info" | "warn" | "error" | "fatal""trace"Sets the minimum log level to process. Messages with a lower priority level will be ignored
appendObjectDatabooleanfalseControls where object data (metadata, context, errors) appears in the log messages. false: Object data appears as the first parameter. true: Object data appears as the last parameter. Has no effect if messageField is defined
messageFieldstring-If defined, places the message into the specified field in the log object, joins multi-parameter messages with a space (use the sprintf plugin for formatted messages), and only logs the object to the console
dateFieldstring-If defined, populates the field with the ISO date. If dateFn is defined, will call dateFn to derive the date
levelFieldstring-If defined, populates the field with the log level. If levelFn is defined, will call levelFn to derive the level
dateFn() => string | number-If defined, a function that returns a string or number for the value to be used for the dateField
levelFn(logLevel: LogLevelType) => string | number-If defined, a function that returns a string or number for a given log level. The input should be the logLevel
stringifybooleanfalseIf true, applies JSON.stringify to the structured log output when messageField, dateField, or levelField is defined

Examples

Level Configuration

typescript
const log = new LogLayer({
  transport: new ConsoleTransport({
    logger: console,
    level: "info"  // Will only process info, warn, error, and fatal logs
  })
});

log.debug('This message will be ignored');
log.info('This message will be logged');

Object Data Positioning

typescript
// appendObjectData: false (default)
log.withMetadata({ user: 'john' }).info('User logged in');
// console.info({ user: 'john' }, 'User logged in')

// appendObjectData: true
log.withMetadata({ user: 'john' }).info('User logged in');
// console.info('User logged in', { user: 'john' })

Message Field

typescript
const log = new LogLayer({
  transport: new ConsoleTransport({
    logger: console,
    messageField: 'msg'
  })
});

log.withMetadata({ user: 'john' }).info('User logged in', 'successfully');
// console.info({ user: 'john', msg: 'User logged in successfully' })

Date Field

typescript
const log = new LogLayer({
  transport: new ConsoleTransport({
    logger: console,
    dateField: 'timestamp'
  })
});

log.info('User logged in');
// console.info({ timestamp: '2023-12-01T10:30:00.000Z' })

Level Field

typescript
const log = new LogLayer({
  transport: new ConsoleTransport({
    logger: console,
    levelField: 'level'
  })
});

log.warn('User session expired');
// console.warn({ level: 'warn' })

Custom Date Function

typescript
const log = new LogLayer({
  transport: new ConsoleTransport({
    logger: console,
    dateField: 'timestamp',
    dateFn: () => Date.now() // Returns Unix timestamp
  })
});

log.info('User logged in');
// console.info({ timestamp: 1701437400000 })

Custom Level Function

typescript
const log = new LogLayer({
  transport: new ConsoleTransport({
    logger: console,
    levelField: 'level',
    levelFn: (level) => level.toUpperCase()
  })
});

log.warn('User session expired');
// console.warn({ level: 'WARN' })

Numeric Level Mapping

typescript
const log = new LogLayer({
  transport: new ConsoleTransport({
    logger: console,
    levelField: 'level',
    levelFn: (level) => {
      const levels = { trace: 10, debug: 20, info: 30, warn: 40, error: 50, fatal: 60 };
      return levels[level as keyof typeof levels] || 0;
    }
  })
});

log.error('Database connection failed');
// console.error({ level: 50 })

Stringify Output

typescript
const log = new LogLayer({
  transport: new ConsoleTransport({
    logger: console,
    messageField: 'msg',
    dateField: 'timestamp',
    levelField: 'level',
    stringify: true
  })
});

log.withMetadata({ user: 'john' }).info('User logged in');
// console.info('{"user":"john","msg":"User logged in","timestamp":"2023-12-01T10:30:00.000Z","level":"info"}')

Combining Fields

You can combine multiple fields to create structured log objects:

typescript
const log = new LogLayer({
  transport: new ConsoleTransport({
    logger: console,
    messageField: 'msg',
    dateField: 'timestamp',
    levelField: 'level'
  })
});

log.withMetadata({ user: 'john' }).info('User logged in');
// console.info({ 
//   user: 'john', 
//   msg: 'User logged in', 
//   timestamp: '2023-12-01T10:30:00.000Z', 
//   level: 'info' 
// })

Log Level Mapping

LogLayerConsole
tracedebug
debugdebug
infoinfo
warnwarn
errorerror
fatalerror