appinsights-pino-logger
v1.0.18
Published
A TypeScript logger integrating Pino with Azure Application Insights and correlationId support.
Maintainers
Readme
📦 appinsights-pino-logger
A lightweight, production-ready TypeScript logger built on Pino, designed for modern distributed applications. It provides:
⚡ Fast, pretty, colorized logging
🧵 Automatic correlationId tracking via AsyncLocalStorage
☁️ Optional Azure Application Insights integration
🔗 Inline single-line log formatting (no JSON metadata blocks)
🔧 Runtime configuration through logger.init()
Ideal for microservices, Kafka consumers, API gateways, and distributed systems needing reliable request tracing.
🚀 Features
| Feature | Description |
| ---------------------------------- | ---------------------------------------- |
| ⚡ Fast Pino logging | Pretty output, timestamps, colorized |
| 🧵 AsyncLocalStorage correlationId | Automatic context propagation |
| ☁️ Optional Azure AI | Only used if installed + enabled |
| 🧩 Multiple log arguments | logger.info("a", 1, { b: 2 }) |
| 🔧 Runtime configuration | serviceName, version, log level, AI keys |
| 🧼 Clean inline logs | No multi-line metadata in console |
| 🔄 Severity mapping | Translates Pino → Azure AI severity |
📥 Installation
npm install appinsights-pino-loggerOptional (only if you want Azure Telemetry):
npm install applicationinsights🔧 Initialization
import { logger } from "appinsights-pino-logger";
// const { logger } = require("appinsights-pino-logger"); // CommonJS
logger.init({
serviceName: "billing-service",
version: "2.1.0",
level: "debug",
connectionString: process.env.APPINSIGHTS_CONNECTION_STRING,
enableAI: true
});Supported init() Options
| Option | Type | Description |
| -------------------- | -------- | --------------------------- |
| serviceName | string | Name of your service |
| version | string | Version tag for logs |
| level | string | Log level (default: info) |
| timestamp | function | Custom timestamp formatter |
| connectionString | string | Azure AI connection string |
| instrumentationKey | string | Legacy Azure AI key |
| enableAI | boolean | Toggle AI logging |
⚙️ Environment Variables (Optional)
SERVICE_NAME=service-api
SERVICE_VERSION=1.0.0
LOG_LEVEL=debug
APPINSIGHTS_CONNECTION_STRING=InstrumentationKey=xxxx...
ENABLE_APPINSIGHTS=true🧱 Basic Usage
import { logger } from "appinsights-pino-logger";
logger.info("Service started");
logger.debug("Debug details");
logger.error("Something went wrong");
console.log = logger.log; // optional override console.log🧵 Correlation ID
Automatic (Async Safe)
import { withContext, logger } from "appinsights-pino-logger";
withContext({ correlationId: "order-999" }, async () => {
logger.info("Processing order");
await new Promise(r => setTimeout(r, 200));
logger.info("Order completed");
});🔍 Log Output Format
Terminal output:
[2025-12-09 03:55:27] INFO: [correlationId: "test-corr-1232"][version: "1.2.0"] Payment created {"amount":100} USD {"userId":50}✨ Why this log format?
🔹 One clean line per log entry
🔹 Optimized for local development readability
🔹 No bulky multi-line metadata blocks
🔹 Complete metadata still captured by Azure AI
☁️ Viewing Logs in Azure Application Insights
Basic:
traces
| order by timestamp descFilter by correlationId:
traces
| where customDimensions.correlationId == "order-999"🧪 Logging Multiple Arguments
logger.info(
"Payment created",
{ amount: 100 },
"USD",
{ userId: 50 }
);🧰 Express Example
import express from "express";
import { withContext, logger } from "appinsights-pino-logger";
import { v4 as uuid } from "uuid";
logger.init({ serviceName: "express-api", version: "1.0.0" });
const app = express();
app.use((req, res, next) => {
const correlationId = req.headers["x-correlation-id"] || uuid();
withContext({ correlationId }, next);
});
app.get("/hello", (_, res) => {
logger.info("Request received");
res.send("Hello");
});
app.listen(3000, () => logger.info("Server running"));🧬 Kafka Example
consumer.on("message", msg => {
withContext({ correlationId: msg.headers.correlationId }, () => {
logger.info("Message received", msg.value);
});
});🧹 Graceful Shutdown
process.on("beforeExit", () => {
logger.aiClient?.flush();
});📝 License
MIT
