Skip to content
Node.js SDK

Node.js SDK

Install

npm install @logtracehq/logtrace-node

Usage

import { Logtrace } from "@logtracehq/logtrace-node";

const client = Logtrace.new(process.env.LOGTRACE_API_KEY!);

// Track an application event
await client.createEvent({
  name: "invoice.created",
  user_id: "user_123",
  username: "jane.doe",
  metadata: {
    invoiceId: "inv_456",
    amount: 250000,
    currency: "UGX",
  },
});

// Track a user session
await client.createSession({
  user_id: "user_123",
  login_at: new Date(),
  status: "active",
});

// Create an audit log entry
await client.createAuditLog({
  name: "user.updated",
  timestamp: new Date(),
  user_id: "user_123",
  username: "jane.doe",
  metadata: {
    role: {
      old: "user",
      new: "admin",
    },
  },
});

Express middleware example

Automatically attaches request context (IP, method, endpoint, headers, status code) to every Logtrace call made inside a request handler.

import express from "express";
import { Logtrace, logger, fromContext } from "@logtracehq/logtrace-node";

const app = express();

const client = Logtrace.new(process.env.LOGTRACE_API_KEY!);

app.use(logger(client));

app.post("/login", async (req, res) => {
  const logtrace = fromContext(client);

  await logtrace.createSession({
    user_id: "user_123",
    login_at: new Date(),
    status: "active",
  });

  await logtrace.createEvent({
    name: "user.login",
    username: "jane.doe",
    user_id: "user_123",
  });

  res.json({ ok: true });
});

fromContext() automatically enriches records with request metadata when available and falls back gracefully outside HTTP contexts (workers, cron jobs, queues, and tests).

Background jobs

import { Logtrace } from "@logtracehq/logtrace-node";

const client = Logtrace.new(process.env.LOGTRACE_API_KEY!);

async function processInvoice(invoiceId: string) {
  await client.createEvent({
    name: "invoice.processing.started",
    type: "invoice-worker",
    metadata: {
      invoiceId,
    },
  });

  // process invoice...

  await client.createEvent({
    name: "invoice.processing.completed",
    type: "invoice-worker",
    metadata: {
      invoiceId,
    },
  });
}

Error handling

import { Logtrace, LogtraceError } from "@logtracehq/logtrace-node";

const client = Logtrace.new(process.env.LOGTRACE_API_KEY!);

try {
  await client.createEvent({
    name: "user.created",
    type: "api",
  });
} catch (err) {
  if (err instanceof LogtraceError) {
    console.error("Logtrace API error:", {
      statusCode: err.statusCode,
      message: err.message,
    });
  } else {
    console.error("Unexpected error:", err);
  }
}