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.
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
Name | Type | Default | Description |
---|---|---|---|
level | "trace" | "debug" | "info" | "warn" | "error" | "fatal" | "trace" | Sets the minimum log level to process. Messages with a lower priority level will be ignored |
appendObjectData | boolean | false | Controls 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 |
messageField | string | - | 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 |
dateField | string | - | If defined, populates the field with the ISO date. If dateFn is defined, will call dateFn to derive the date |
levelField | string | - | 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 |
stringify | boolean | false | If 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
LogLayer | Console |
---|---|
trace | debug |
debug | debug |
info | info |
warn | warn |
error | error |
fatal | error |