Repository URL to install this package:
|
Version:
3.0.0-1 ▾
|
vending-agent-dep
/
usr
/
local
/
lib
/
vending
/
agent
/
node_modules
/
@verycrazydog
/
level-logger
|
|---|
| .. |
| dist |
| src |
| tsconfig.json |
| package.json |
| LICENSE |
| README.md |
| changelog.md |
A flexible logger supports log level. Inpired by console-log-level, got and loglevel.
level-logger was created because of inability to perform certain tasks on existing propular logging modules:
format.splat()
but unfortunately unable to find out at the time of inventing level-logger.The design of level-logger was inpired by:
.extend() of got, .extend() method was added for conveniently alter the behavior of logger.methodFactory of loglevel, level-logger is highly customizable.npm install @verycrazydog/level-logger
Console logging
const { LevelLogger } = require('@verycrazydog/level-logger') const logger = new LevelLogger({ level: 'INFO' }) // Print 'Hello World!' logger.info('Hello World!')
Console logging with timestamp prefix
const { LevelLogger, LogTags } = require('@verycrazydog/level-logger') const logger = new LevelLogger({ level: 'INFO', prefixes: [ LogTags.TIMESTAMP ] }) // Print '2020-10-13 20:02:11 Hello World!' logger.info('Hello World!')
Custom timestamp format
const { LevelLogger, LogTags } = require('@verycrazydog/level-logger') const logger = new LevelLogger({ level: 'INFO', prefixes: [ LogTags.TIMESTAMP ], timestampFormatter: value => { const hour = value.getHours().toString().padStart(2, '0') const minute = value.getMinutes().toString().padStart(2, '0') const second = value.getSeconds().toString().padStart(2, '0') return `${hour}:${minute}:${second}` } }) // Print '20:54:26 Hello World!' logger.info('Hello World!')
Use .extend() to create per-request logger
const { LevelLogger, LogTags } = require('@verycrazydog/level-logger') const express = require('express') const logger = new LevelLogger({ level: 'INFO', prefixes: [ LogTags.TIMESTAMP, 'SERVER' ] }) const reqLoggerBase = logger.extend({ prefixes: [ LogTags.TIMESTAMP, 'REQUEST' ] }) const app = express() const port = 3000 app.get('/', (req, res) => { const reqId = Math.round(Math.random() * 99999999).toString().padStart(8, '0') const reqLogger = reqLoggerBase.extend({ prefixes: [ ...reqLoggerBase.prefixes, reqId ] }) // Print '2020-10-13 20:22:29 REQUEST 80419951 GET /' reqLogger.info(req.method, req.path) res.send('Hello World!') }) app.listen(port, () => { // Print '2020-10-13 20:22:28 SERVER Server running at port 3000' logger.info('Server running at port', port) })
Process message for AWS CloudWatch to display as single log entry with formatted JSON display
const { LevelLogger, LogTags, defaultMessageFormatter } = require('@verycrazydog/level-logger') const logger = new LevelLogger({ level: 'INFO', prefixes: [ LogTags.TIMESTAMP ], messageFormatter: (level, resolvedPrefixes, ...messageParams) => { messageParams = messageParams.map(p => { if (typeof p === 'object' && !(p instanceof Error)) { return JSON.stringify(p) } else { return p } }) let message = defaultMessageFormatter(level, resolvedPrefixes, ...messageParams) // Reference https://stackoverflow.com/a/44272913/1131246 message = message.replace(/\r?\n/g, '\r') return message } }) logger.info({ message: 'Hello World!' }) logger.error(new Error('Test Error'))
Combine with other logger to log to file
const { LevelLogger, LogTags } = require('@verycrazydog/level-logger') const winston = require('winston') const winstonLogger = winston.createLogger({ level: 'debug', format: winston.format.printf(({ message }) => { return message }), transports: [ new winston.transports.Console(), new winston.transports.File({ filename: 'app.log' }) ] }) const logger = new LevelLogger({ level: 'DEBUG', prefixes: [ LogTags.TIMESTAMP, LogTags.MESSAGE_LEVEL ], logger: (level, message) => { winstonLogger.log(level, message) } }) // Print '2020-10-13 20:51:07 INFO Hello World!' to both console and log file logger.info('Hello World!')
This module is licensed under the MIT License.