# @dvelop-sdk/logging

> This package contains functions for logging with OpenTelemetry.

Latest version **1.1.1** (published 2026-09-17) · Apache-2.0 license · 0 weekly downloads

## Install

```sh
npm install @dvelop-sdk/logging
pnpm add @dvelop-sdk/logging
yarn add @dvelop-sdk/logging
bun add @dvelop-sdk/logging
```

## Health

**Score 65/100 (B)** — status: active.

Positive: has types; no vulnerabilities; has provenance; recently updated; high maintenance score.

Warnings: low downloads; no esm support.

## Facts

| | |
|---|---|
| Version | 1.1.1 |
| Published | 2026-09-17 |
| First published | 2022-04-06 |
| Weekly downloads | 0 |
| License | Apache-2.0 |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 54.8 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Provenance | attested (GitHub Actions) |
| GitHub stars | 14 |
| Author | Veit Kunz |
| Maintainers | d-velop, lenklose |

## Links

- npm: https://www.npmjs.com/package/@dvelop-sdk/logging
- Repository: https://github.com/d-velop/dvelop-sdk-node
- Homepage: https://github.com/d-velop/dvelop-sdk-node#readme
- Issues: https://github.com/d-velop/dvelop-sdk-node/issues
- npm.io page: https://npm.io/package/@dvelop-sdk/logging

## Dependencies (1)

- [@dvelop-sdk/core](https://npm.io/package/@dvelop-sdk/core.md) ^3.0.0

## Recent versions

- 1.1.1 (latest) — 2026-09-17
- 1.1.0 — 2026-06-23
- 1.0.9 — 2026-04-21
- 1.0.8 — 2026-04-17
- 1.0.7 — 2026-01-23
- 1.0.6 — 2025-05-20
- 1.0.5 — 2024-07-01
- 1.0.4 — 2024-04-22
- 1.0.3 — 2024-03-26
- 1.0.2 — 2024-03-15
- 1.0.1 — 2022-08-31
- 1.0.0 — 2022-07-12
- 1.0.0-beta.9 — 2022-06-29
- 1.0.0-beta.8 — 2022-06-15
- 1.0.0-beta.7 — 2022-05-31
- … 5 more at https://npm.io/package/@dvelop-sdk/logging/versions

## README

<div align="center">
  <h1>@dvelop-sdk/logging</h1>
  <a href="https://www.npmjs.com/package/@dvelop-sdk/logging">
    <img alt="npm (scoped)" src="https://img.shields.io/npm/v/@dvelop-sdk/logging?style=for-the-badge">
  </a>
  <a href="https://www.npmjs.com/package/@dvelop-sdk/logging">
    <img alt="npm bundle size (scoped)" src="https://img.shields.io/bundlephobia/min/@dvelop-sdk/logging?style=for-the-badge">
  </a>
  <a href="https://github.com/d-velop/dvelop-sdk-node">
    <img alt="GitHub" src="https://img.shields.io/badge/GitHub-dvelop--sdk--node-%23ff0844?logo=github&style=for-the-badge">
  </a>
  <a href="https://github.com/d-velop/dvelop-sdk-node/blob/master/LICENSE">
    <img alt="license" src="https://img.shields.io/github/license/d-velop/dvelop-sdk-node?style=for-the-badge">
  </a>

  </br>

  <p>This package contains functions for logging in the d.velop cloud.</p>

  <a href="https://d-velop.github.io/dvelop-sdk-node/modules/logging.html"><strong>Explore the docs »</strong></a>

  </br>

  <a href="https://www.npmjs.com/package/@dvelop-sdk/logging"><strong>Install via npm »</strong></a>

  </br>

  <a href="https://github.com/d-velop/dvelop-sdk-node"><strong>Check us out on GitHub »</strong></a>

</div>

## Just let me log
This package exposes a `DvelopLogger`-class which is initialized with a `level` and 1-n `Providers`. See [Concepts](##Concepts) for more information.

### Initialize a logger
```typescript
const logger = new DvelopLogger({
  level: "info",// logs info and above
  providers: [
    // Providers define a logging scheme. Currently only OTEL is supported.
    otelProviderFactory({
      appName: "acme-myapp",
      appVersion: "1.0.0",
      instanceId: "0",

      // Transports define where to logging statements are send. Multiple transports can be used.
      transports: [
        consoleTransportFactory(), // logs to console
        fileTransportFactory("./logs.txt") // logs to file 'logs.txt'
      ]
    })
  ],
});
```

Supported LogLevels are `debug`, `info` and `error`, represented by exposed methods.

### Start Logging

The minimal logstatement defines a level and a string to log. The OTEL-Provider transforms the information.

```typescript
logger.debug({}, "Hello World!");
/**
 * {
 *   "time":"2022-07-07T11:06:34.105Z",
 *   "sev":9,
 *   "body":"Hello World!",
 *   "res":{
 *     "svc":{
 *       "name":"acme-myapp",
 *       "ver":"1.0.0"
 *       "inst": "0"
 *     }
 *   },
 *   "vis":1
 * }
 */

```

For each method the first argument is a `DvelopContext`-object and the second argument a `DvelopLogEvent`-object.

```typescript

try {
  convinceLeonidasThatThisIsMadness();
} catch (error: any) {

  logger.error({
    systemBaseUri: "https://sparta.d-velop.cloud",
    tenantId: "T8r3cWM4JII"
  }, {
    name: "MissionFailedLogger",
    message: "Apparently this is Sparta",
    error: error,
    customAttributes: {
      learnings: "Don't stand near a well"
    }
  });
}
/**
 * {
 *   "time":"479BCT11:11:11.111Z",
 *   "sev":17,
 *   "name":"MissionFailedLogger",
 *   "body":"Apparently this is Sparta",
 *   "tn":"T8r3cWM4JII",
 *   "res":{
 *     "svc":{
 *       "name":"acme-myapp",
 *       "ver":"1.0.0",
 *       "inst": "0"
 *     }
 *   },
 *   "attr":{
 *     "learnings":"Don't stand near a well",
 *     "exception":{
 *       "message":"THIS IS SPARTA",
 *       "type":"RoundHouseKickError",
 *       "stacktrace":"..."
 *     }
 *   },
 *   "vis":1
 * }
 */

```

## Concepts
In this package logging is divided over three layers
1. Transports
2. Providers
3. Logger

### Transports
Transports are responsible for transporting a log-event. Transports are agnostic about the form of the log event.

```typescript
export type TransportFn = (event: any) => Promise<void>;
```

There are currently two default transports supported:
```typescript
import { TransportFn, consoleTransportFactory, fileTransportFactory } from "@dvelop-sdk/logging";

const consoleTransport: TransportFn = consoleTransportFactory();
await consoleTransport("Hello World!"); // log "Hello World" to console in Node.js and Browsers

const fileTransport: TransportFn = fileTransportFactory("./logs.txt");
await fileTransport("Hello World!"); // log "Hello World" to logs.txt
```

You can easily implement your own Transport-Function:
```typescript
async function myTransport(event: any): Promise<void> {
  // jump through hoops
}
```

### Providers
Providers are able to work with the `DvelopLogEvent`-Type. The do transformation and **may** support any Transport-Functions, a subset or none (e.g a Syslog-Provider could have a UDP Transport to Port 514 baked in).

```typescript
export type ProviderFn = (context: DvelopContext, event: DvelopLogEvent, level: DvelopLogLevel) => Promise<void>;
```

 One default Provider is supported:
```typescript
import { ProviderFn, otelProviderFactory } from "@dvelop-sdk/logging";

const otel: ProviderFn =  otelProviderFactory({
  appName: "acme-myapp",
  appVersion: "1.0.0",
  instanceId: "0",
  transports: [ consoleTransport, fileTransport, myTransport ]
});
```

D.velop default is to log in a JSON-Format derived from the [Open Telemetry Standard](https://opentelemetry.io/docs/reference/specification/logs/overview). The `otelProviderFactory` creates a `ProviderFn` that is responsable for according transformations (e.g. map level "info" to OTELs numeric severity of 9).

You can easily implement your own Provider-Function:
```typescript

// do a fixed provider
async function myProvider(context: DvelopContext, event: DvelopLogEvent, level: DvelopLogLevel): Promise<void> {
  // jump through hoops
}

// or have some init
async function myProviderFactory(howMuchIsTheFish: number): ProviderFn {
  return (context: DvelopContext, event: DvelopLogEvent, level: DvelopLogLevel) => Promise<void> {
    // jump through hoops
  }
}

// or even support generic TransportFunctions
async function myProviderFactory(transports: TransportFn[]): ProviderFn {
  return (context: DvelopContext, event: DvelopLogEvent, level: DvelopLogLevel) => Promise<void> {
    const formattedEvent: any = {} // jump through hoops
    transports.forEach(t => t(formattedEvent));
  }
}
```

### Logger
Finally we have that can log something. The `DvelopLogger` accepts a level (everything above is logged) and 1-n provider-functions.

```typescript
const logger = new DvelopLogger({
  level: "info",
  providers: [
    otelProviderFactory({
      appName: "acme-myapp",
      appVersion: "1.0.0",
      instanceId: "0",
      transports: [
        consoleTransportFactory(),
        fileTransportFactory("./logs.txt")
      ]
    })
  ],
});
```

---
_Source: https://npm.io/package/@dvelop-sdk/logging · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
