@bothive/session-logger
Version:
Pino session logger
179 lines (128 loc) • 5.27 kB
Markdown
# Session logger
Session logger is a logging package wrapt around the popular Pino logger to help you trace your logs through a session.
**Version:** 0.1.0
## Start
When you app starts you need to register the Session logger before you can use it
```
import { SessionLogger, ELogLevel } from "@bothive/session-logger";
SessionLogger.register({
environment: "development",
logLevel: ELogLevel.info,
enableTraceId: true,
prettyPrint: true,
masking: true,
});
```
After this you can use the logger through out your app like this
```
import logger from "@bothive/session-logger";
logger().error("log error", { meta: "meta information" })
```
## HttpMiddleware
One of the main purposes of this package is the ease to use it to trace logs in an http session
```
import logger, { SessionLogger } from "@bothive/session-logger";
...
app.use(SessionLogger.HttpMiddleware);
app.get('/', (req, res, next) => {
logger().info('Trace ID logging included', { context: 'MyApp' });
next();
});
...
```
if the request headers contains `x-request-id` and/or `x-session-id` these id's will be used in the logs
**Outputs:**
```
[2021-07-16 16:53:12] INFO: [MyApp]: Trace ID logging included
environment: "development"
traceId: "JBzNjRQTghKNrTuqMxbUeSE51"
session: "F5vnJm7sj65AGhPGhKgRBiSpy"
context: "MyApp",
```
## EventMiddleware
One of the main purposes of this package is the ease to use it to trace logs in an event based service
```
import logger, { SessionLogger } from "@bothive/session-logger";
...
function callback(event) {
logger().info('Trace ID logging included', { meta: "meta information" });
}
kafka
.getTopicSubject({ topic: topicName, loadBalanced: true })
.subscribe((event) => SessionLogger.EventMiddleware(event, callback));
...
```
if the event contains an headers object with `traceId` and/or `sessionId` these id's will be used in the logs
**example event**
```
{
"headers": {
"context": "get user",
"traceId": "JBzNjRQTghKNrTuqMxbUeSE51",
"sessionId": "F5vnJm7sj65AGhPGhKgRBiSpy",
},
...
}
```
**Outputs:**
```
[2021-07-16 16:53:12] INFO: [get user]: Trace ID logging included
environment: "development"
traceId: "JBzNjRQTghKNrTuqMxbUeSE51"
session: "F5vnJm7sj65AGhPGhKgRBiSpy"
{ meta: "meta information" }
```
### Config
| name | type | default |
| ------------- | --------- | ---------------------------------------------- |
| environment | String | ENVIRONMENT NOT SET |
| logLevel | ELogLevel | silent, trace, debug, info, warn, error, fatal |
| enableTraceId | Boolean | false |
| masking | Boolean | false |
| prettyPrint | Boolean | true |
#### Environment
Define which environment should be shown in the logs
#### Log level
The `logLevel` setting can contain one of the values below:
```
type LogLevel =
| 'silent'
| 'trace'
| 'debug'
| 'info'
| 'warn'
| 'error'
| 'fatal';
```
When you set a log level, only the logs with a more serious log level are displayed. For example, setting `warn` will only display the logs with levels `warn`, `error` and `fatal`.
The log levels `trace`, `debug` or `info` are commonly used for development environments.
The log level `warn` is mostly used for production environments.
#### Masking
To redact/remove sensitive information from the logs you can set the `masking` setting to `true`.
Currently these nested properties will be removed from the logs:
```
[
'*.password',
'*.newPassword',
'*.oldPassword',
'*.accessToken',
'*.refreshToken',
'*.token',
'*.jwtToken',
'*.apiKey',
]
```
#### Pretty print
When turned on, pretty, multi-line logs will be output. When turned off, one-line stringified JSON will be output.
Advised to turn this off in staging or production environments.
## Definition
| name | description |
| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| context | context can be used to trace a specific action through multiple logs, sessions and traces. for example when you fetch a user account, context can be *get user* so you can find all logs related to fetching a user |
| sessionId | An id used to trace multiple event / http call's for example in the frontend you create a user session that uses this id until user ends the session to trace back all logs this user logged during their session |
| traceId | An id used to trace an event / http call from start to finish
## Contribution guidelines
Follow the Bothive code and review guidelines
## Who do I talk to?
### Repo owner or admin
- [Thuur vandeplassche](mailto:thuur.vandeplassche@bothive.be)