A WHATWG Console API adapter for Pino loggers that provides full Node.js Console interface compatibility with structured JSON logging.
npm install pino-console pinoimport pino from 'pino'
import Console from 'pino-console'
const logger = pino()
const console = new Console(logger)
console.log('Hello, structured logging!')
// Output: {"level":30,"time":1234567890,"pid":1234,"hostname":"host","msg":"Hello, structured logging!"}npm install pino-console pinoFor pretty development output:
npm install pino-prettyimport pino from 'pino'
import Console from 'pino-console'
// Create a Pino logger
const logger = pino({
level: 'info',
transport: {
target: 'pino-pretty' // For development
}
})
// Create a Console adapter
const console = new Console(logger)
// Use console methods as usual
console.log('Application starting...')
console.info('This is an info message')
console.warn('This is a warning')
console.error('This is an error')Replace your console usage:
// Before
console.log('User logged in:', userId)
// After
import { console } from './logger.js' // Your pino-console instance
console.log('User logged in:', userId) // Now outputs structured JSONimport pino from 'pino'
import Console from 'pino-console'
// Only log warnings and errors
const logger = pino({ level: 'warn' })
const console = new Console(logger)
console.debug('Not logged') // Filtered out
console.log('Not logged') // Filtered out
console.warn('Logged') // Shown
console.error('Logged') // ShownLevel mapping:
console.debug()→pino.debug()(level 20)console.log()/info()→pino.info()(level 30)console.warn()→pino.warn()(level 40)console.error()→pino.error()(level 50)
Creates a new Console instance.
- Parameters:
logger(Pino Logger) - A Pino logger instance - Throws:
TypeErrorif logger is invalid - Returns: Console instance
console.log(message?, ...optionalParams)- Info level loggingconsole.info(message?, ...optionalParams)- Info level loggingconsole.warn(message?, ...optionalParams)- Warn level loggingconsole.error(message?, ...optionalParams)- Error level loggingconsole.debug(message?, ...optionalParams)- Debug level logging
All logging methods support standard format specifiers:
| Specifier | Description | Example |
|---|---|---|
%s |
String | console.log('Hello %s', 'world') |
%d, %i |
Integer | console.log('Count: %d', 42) |
%o |
Object (shallow) | console.log('Data: %o', obj) |
%O |
Object (deep) | console.log('Data: %O', obj) |
%% |
Literal % | console.log('100%% complete') |
- Timing:
time(label?),timeEnd(label?),timeLog(label?, ...data) - Counting:
count(label?),countReset(label?) - Grouping:
group(...label),groupCollapsed(...label),groupEnd() - Display:
table(tabularData, properties?),dir(obj, options?),dirxml(...data),clear() - Debugging:
assert(value, message?, ...params),trace(message?, ...params) - Inspector:
profile(label?),profileEnd(label?),timeStamp(label?)(no-ops)
Full TypeScript support is included:
import pino from 'pino'
import Console from 'pino-console'
const logger = pino({ level: 'info' })
export const console = new Console(logger)
// All methods are fully typed
console.log('Message with %s and %d', 'string', 42)
console.time('operation')
console.table([{ name: 'Alice' }, { name: 'Bob' }])
console.timeEnd('operation')See example.mjs for a comprehensive demonstration of all features.
pino-console includes performance optimizations:
- Level-enabled checks: Disabled log levels have minimal overhead
- Lazy evaluation: Format specifiers only processed when needed
- Structured output: Enables efficient log parsing and analysis
import pino from 'pino'
import Console from 'pino-console'
// Level filtering prevents unnecessary work
const logger = pino({ level: 'warn' })
const console = new Console(logger)
// These have near-zero cost when filtered
console.debug('Debug info', expensiveOperation()) // Skipped entirely
console.info('Info message', largeObject) // Skipped entirely
// These are processed
console.warn('Warning') // Processed
console.error('Error') // ProcessedContributions are welcome! Please see CONTRIBUTING.md for guidelines.
MIT License - see LICENSE file for details.
- Pino - Super fast, all natural JSON logger
- WHATWG Console Standard - Console API specification
- pino-pretty - Pretty print Pino logs