Skip to content

Commit

Permalink
Added logger docs
Browse files Browse the repository at this point in the history
  • Loading branch information
wisko committed Oct 30, 2024
1 parent ac3f5d7 commit 0af7bd8
Showing 1 changed file with 63 additions and 3 deletions.
66 changes: 63 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,26 @@
# @bonniernews/logger

Bonnier News logger library, that makes it easier to unify logging. It is pre-configured for GCP and includes tracing capabilities for Express servers.

```sh
npm install @bonniernews/logger
```

## Usage

Here is an example server with log tracing enabled.

```js
import {
fetchGcpProjectId,
getHttpTraceHeader,
getLoggingTraceData,
middleware,
} from "@bonniernews/bn-log-tracer";
logger as BNLogger
} from "@bonniernews/logger";
import express from "express";
import pino from "pino";

const logger = pino({ mixin: getLoggingTraceData });
const logger = BNLogger();
const app = express();

app.use(middleware);
Expand All @@ -31,3 +39,55 @@ app.get("/", async (req, res) => {
...
});
```

### Logger Interface

#### Options

This library uses the [Pino logger](https://github.com/pinojs/pino), and instances are created using the same options. In most cases this is not needed, and you can use the defaults:

- Uses `info` as the minimum log level
- JSON logging with `severity` and `message` fields for non-local environments - in line with [GCP structured logging](https://cloud.google.com/logging/docs/structured-logging) standards
- Pretty logging enabled for local development and test environments

#### Log Levels

The logger has the following levels, with their corresponding GCP `severity` mapping:

| Log level | GCP severity |
| --------- | ------------ |
| `trace` | `DEBUG` |
| `debug` | `DEBUG` |
| `info` | `INFO` |
| `warn` | `WARNING` |
| `error` | `ERROR` |
| `fatal` | `CRITICAL` |

#### Log messages

Here are a few examples on how to use the logger:

```js
import { logger } from "@bonniernews/logger";

const log = logger({ level: "debug" });

log.debug("This is just a message");

log.info("This is how to use %s strings: %d", "template", 123);

log.info({ any: { additional: "data" } }, "I'm attaching relevant data");

const error = new Error("Oops!");

// This will set error.message as the log message,
// and add a serialized error object under the `err` key:
log.warn(error);

// The `err` key is special, and triggers error serialization:
log.error({ err: error }, "This message takes precedence over err.message");
```

#### Tracing

If you want to decorate logs with tracing fields for incoming requests, use the library's `middleware`, which will use Node async hooks to store and decorate all logs using the [standardized](https://www.w3.org/TR/trace-context/) `traceparent` header.

0 comments on commit 0af7bd8

Please sign in to comment.