@shapeshiftoss/logger
ShapeShift DAO's simple logging library.
Installation
yarn add @shapeshiftoss/logger
# or
npm i @shapeshiftoss/logger
Initialization
import { Logger } from '@shapeshiftoss/logger'
const logger = new Logger({
// name of the app or service
namespace: ['Parent'],
// alias: name: 'Parent'
// severity threshold (default='info')
level: 'debug',
// extra fields to include on each message
defaultFields: {
fn: 'defaultFn'
}
})
Custom logging output function
By default, the Logger will log a JSON
string to the console
.
You can customize this by providing a logFn
option to the Logger constructor.
import { Logger } from '@shapeshiftoss/logger'
import type { LogLevel, LogData } from '@shapeshiftoss/logger'
const logger = new Logger({
name: 'MyAppLogger',
logFn: (level: LogLevel, data: LogData) => {
myCentralLogger.send(JSON.stringify(data))
}
})
Logging
Functions
- trace
- debug
- info
- warn
- error
Examples
// (string)
logger.info('my message')
// {"fn":"defaultFn","message":"my message",
// "timestamp":"2021-10-25T17:48:33.255Z","namespace":"Parent","status":"info"}
// (object)
logger.debug({ txid: '123aef' })
// {"fn":"defaultFn","txid":"123aef",
// "timestamp":"2021-10-25T17:49:21.105Z","namespace":"Parent","status":"debug"}
// (error)
logger.error(new Error('something went wrong'))
// {"fn":"defaultFn","error":{"message":"something went wrong","stack":"...snip...","kind":"Error"},
// "timestamp":"2021-10-25T17:49:31.626Z","namespace":"Parent","status":"error"}
// (error, object, string)
logger.error(
new Error('something went wrong'),
{ data: { orderId: '123-aef-33' }},
'error occured while fetching order'
)
/*
{"fn":"defaultFn",
"error":{"message":"something went wrong","stack":"...snip...","kind":"Error"},
"data":{"orderId":"123-aef-33"},
"message":"error occured while fetching order",
"timestamp":"2021-10-25T17:50:53.101Z",
"namespace":"Parent",
"status":"error"
}
*/
Child loggers
const child = logger.child({ foo: 'bar' })
child.info({ biz: 'baz' }, 'hello!')
// {"fn":"defaultFn","foo":"bar","biz":"baz","message":"hello!",
// "timestamp":"2021-10-25T17:52:29.111Z","namespace":"Parent","status":"info"}
Namespacing
The namespace
configuration property can be used to keep track of the depth/call stack.
When including namespace
in a child, it APPENDS the values to the existing namespace making it easy to see in the output the chain that leads to the output.
const child2 = child.child({ namespace: ['MyModule', 'myFunction']})
child.info({ biz: 'baz' }, 'hello!')
// {"fn":"defaultFn","biz":"baz","message":"hello!",
// "timestamp":"2021-10-25T17:53:55.909Z","namespace":"Parent:MyModule:myFunction","status":"info"}
Reserved Properties
The following property names are reserved. If you want to log out an object that contains these property names, you'll need to nest it inside another object.
'namespace'
'timestamp'
'status'