# tsrml

Tiny TypeScript library for structured logging and health checks.
Capture logs and health metrics efficiently, batch them for processing, and never block your application.

## Install

```sh
npm install tsrml
```

## Usage

```ts
import { createLogger } from "tsrml";

const log = createLogger({
  level: "info",
  context: { service: "api" },
  onError: (err) => console.error("logging error", err),
});

log.info("server started", { port: 3000 });

const requestLog = log.child({ requestId: "abc123" });
requestLog.warn("slow query", { ms: 1420 });

await log.close(); // flush pending logs
```

### Health Checks

Track health metrics and service dependencies:

```ts
import { createLogger } from "tsrml";

const log = createLogger({ level: "info" });

// Log health status
log.info("health_check", {
  service: "api",
  status: "healthy",
  dependencies: {
    database: "up",
    cache: "up",
    externalApi: "degraded"
  }
});
```

Records are formatted as structured log objects:

```json
{
  "level": "warn",
  "message": "slow query",
  "time": "2026-08-22T10:04:11.238Z",
  "context": { "service": "api", "requestId": "abc123", "ms": 1420 }
}
```

## Options

| Option            | Default    | Description                                        |
| ----------------- | ---------- | -------------------------------------------------- |
| `level`           | `"info"`   | Log records below this level are dropped            |
| `batchSize`       | `20`       | Flush once this many records are queued             |
| `flushIntervalMs` | `5000`     | Flush at least this often; `0` disables the timer   |
| `context`         | `{}`       | Merged into every record                            |
| `transport`       | console    | Custom `Transport` for handling batched records     |
| `onError`         | no-op      | Called when a flush fails                           |

## Custom transports

```ts
import { createLogger, type Transport } from "tsrml";

const consoleTransport: Transport = {
  async send(records) {
    for (const r of records) console.log(r.level, r.message);
  },
};

const log = createLogger({ transport: consoleTransport });
```

## Development

```sh
npm install
npm test
npm run typecheck
npm run build
```

## License

MIT
