# Pino Logging for Node.js

> Pino is a fast and minimal JSON logger for Node.js. This guide shows how to set up Pino with support for structured logging and OpenTelemetry transport integration.

## Installation

Install Pino using npm:

```bash
npm install pino
```

For OpenTelemetry support, also install:

```bash
npm install pino-opentelemetry-transport
```

## Setup

### Create a logger.js file

Create a `logger.js` file in your project root to centralize logger configuration:

```javascript
import pino from "pino";

const transport = pino.transport({
  targets: [
    {
      target: "pino/file",
      options: { destination: 1 }, // stdout
      level: "trace",
    },
    {
      target: "pino-opentelemetry-transport",
      options: {},
      level: "trace",
    },
  ],
});

// Wait for the Pino worker threads to be set up
// await new Promise((resolve) => setTimeout(resolve, 1000));

export const logger = pino(transport);
```

This configuration:
- Sends logs to stdout (console)
- Routes logs to OpenTelemetry transport for integration with observability platforms
- Sets log level to "trace" to capture all events

### Import and use in your app

In your main `app.js`, import the logger:

```javascript
import { logger } from "./logger.js";
```

Then use it throughout your application:

```javascript
logger.info("User logged in", { userId: 123 });
logger.warn("Rate limit approaching");
logger.error("Database connection failed", { error: err });
```

## Log Levels

Pino supports the following log levels (in order of severity):
- `fatal` - Application is unusable
- `error` - Error condition
- `warn` - Warning condition
- `info` - Informational message
- `debug` - Debug message
- `trace` - Trace message (most verbose)

## Learn More

For detailed documentation, visit the [Pino npm package](https://www.npmjs.com/package/pino).
