Structured Transport Browser Server Deno Bun
A console-based transport with structured logging enabled by default. Unlike the Console Transport, which requires manually configuring messageField, levelField, and dateField, the Structured Transport comes pre-configured with sensible defaults.
Installation
No additional packages needed beyond the core loglayer package:
sh
npm i loglayersh
pnpm add loglayersh
yarn add loglayerSetup
typescript
import { LogLayer, StructuredTransport } from 'loglayer'
const log = new LogLayer({
transport: new StructuredTransport({
logger: console,
})
})
log.info('User logged in')
// console.info({ level: 'info', time: '2025-01-01T00:00:00.000Z', msg: 'User logged in' })Default Fields
The transport outputs structured log objects with the following default fields:
| Field | Default Key | Description |
|---|---|---|
| Level | level | The log level (e.g., info, warn, error) |
| Timestamp | time | ISO 8601 date string |
| Message | msg | The log message (multi-parameter messages are joined with a space) |
Metadata and context data are merged into the log object alongside these fields.
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 |
messageField | string | "msg" | The field name for the log message. Multi-parameter messages will be joined with a space |
dateField | string | "time" | The field name for the timestamp. If dateFn is defined, will call dateFn to derive the date |
levelField | string | "level" | The field name for 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 |
stringify | boolean | false | If true, applies JSON.stringify to the structured log output |
messageFn | (params: LogLayerTransportParams) => string | - | Custom function to format the log message output. Receives log level, messages, and data; returns the formatted string |
Examples
With Metadata and Context
typescript
const log = new LogLayer({
transport: new StructuredTransport({
logger: console,
})
})
log.withContext({ service: 'api' })
log.withMetadata({ requestId: 'abc-123' }).info('Request received')
// console.info({
// level: 'info',
// time: '2025-01-01T00:00:00.000Z',
// msg: 'Request received',
// service: 'api',
// requestId: 'abc-123'
// })Custom Field Names
typescript
const log = new LogLayer({
transport: new StructuredTransport({
logger: console,
messageField: 'message',
levelField: 'severity',
dateField: 'timestamp'
})
})
log.info('User logged in')
// console.info({ severity: 'info', timestamp: '2025-01-01T00:00:00.000Z', message: 'User logged in' })Custom Date Function
typescript
const log = new LogLayer({
transport: new StructuredTransport({
logger: console,
dateFn: () => Date.now() // Unix timestamp instead of ISO string
})
})
log.info('User logged in')
// console.info({ level: 'info', time: 1701437400000, msg: 'User logged in' })Custom Level Function
typescript
const log = new LogLayer({
transport: new StructuredTransport({
logger: console,
levelFn: (level) => level.toUpperCase()
})
})
log.warn('Disk space low')
// console.warn({ level: 'WARN', time: '2025-01-01T00:00:00.000Z', msg: 'Disk space low' })JSON String Output
typescript
const log = new LogLayer({
transport: new StructuredTransport({
logger: console,
stringify: true
})
})
log.withMetadata({ user: 'john' }).info('User logged in')
// console.info('{"level":"info","time":"2025-01-01T00:00:00.000Z","msg":"User logged in","user":"john"}')Custom Message Formatting
typescript
import { LogLayer, StructuredTransport } from 'loglayer'
import type { LogLayerTransportParams } from 'loglayer'
const log = new LogLayer({
transport: new StructuredTransport({
logger: console,
messageFn: ({ logLevel, messages }: LogLayerTransportParams) => {
return `[${logLevel.toUpperCase()}] ${messages.join(' ')}`
}
})
})
log.info('User logged in')
// console.info({ level: 'info', time: '...', msg: '[INFO] User logged in' })Prefix behavior
If you use withPrefix(), the prefix is applied to the messages before they reach messageFn. For example, log.withPrefix('[MyApp]').info('Hello') would pass messages: ['[MyApp] Hello'] to your messageFn.
Log Level Mapping
| LogLayer | Console |
|---|---|
| trace | debug |
| debug | debug |
| info | info |
| warn | warn |
| error | error |
| fatal | error |
