Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ node_modules
*.d.ts.map
coverage
package-lock.json
dist/
26 changes: 26 additions & 0 deletions examples/transport-string/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Transport String Example

This example demonstrates how to use `pino-opentelemetry-transport` by path, leveraging the bundled version of the transport.

The bundled transport is generated by `npm run build` and placed in the `dist` directory. The library exports a `getBuildPath()` helper function to retrieve the absolute path to this file.

Using the build path is useful when:

- You need a single file transport for worker threads.
- You are bundling your application and want to avoid complex path resolution issues with transports.

## Usage

1. Build the transport (if not already built):

```bash
npm run build
```

2. Run the example:

```bash
node examples/transport-string/index.js
```

3. Ensure you have an OpenTelemetry collector running (e.g., via `docker-compose.yaml` in the root).
23 changes: 23 additions & 0 deletions examples/transport-string/build.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
'use strict'

const esbuild = require('esbuild')
const path = require('path')

const entryPoint = path.join(__dirname, '..', '..', 'lib', 'pino-opentelemetry-transport.mjs')

esbuild.build({
entryPoints: [entryPoint],
bundle: true,
platform: 'node',
outdir: path.join(__dirname, '..', '..', 'dist'),
format: 'esm',
splitting: true,
external: ['pino-abstract-transport', 'otlp-logger', 'pino'],
outExtension: { '.js': '.mjs' },
banner: {
js: 'import { createRequire } from "module"; const require = createRequire(import.meta.url);'
}
}).catch(() => process.exit(1))



23 changes: 23 additions & 0 deletions examples/transport-string/index.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
'use strict'
import pino from 'pino'


async function main() {
const { getBuildPath } = await import('../../lib/pino-opentelemetry-transport.mjs')

const transport = pino.transport({
target: getBuildPath(),
options: {
resourceAttributes: {
'service.name': 'test-service',
'service.version': '1.0.0'
}
}
})

const logger = pino(transport)

logger.info('test message')
}

main()
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
'use strict'
import build from 'pino-abstract-transport'
import { getOtlpLogger } from 'otlp-logger'
import { toOpenTelemetry } from './opentelemetry-mapper.js'

const build = require('pino-abstract-transport')
const { getOtlpLogger } = require('otlp-logger')
const { toOpenTelemetry } = require('./opentelemetry-mapper')

/**
* Pino OpenTelemetry transport
Expand All @@ -14,9 +13,10 @@ const { toOpenTelemetry } = require('./opentelemetry-mapper')
*
* @param { Options } opts
*/
module.exports = async function ({ severityNumberMap, ...loggerOpts } = {}) {
export default async function ({ severityNumberMap, ...loggerOpts } = {}) {
const logger = getOtlpLogger(loggerOpts)


return build(
async function (/** @type { AsyncIterable<Bindings> } */ source) {
const mapperOptions = {
Expand All @@ -29,10 +29,17 @@ module.exports = async function ({ severityNumberMap, ...loggerOpts } = {}) {
}
},
{
async close () {
async close() {
return logger.shutdown()
},
expectPinoConfig: true
}
)
}

export function getBuildPath() {
return import.meta.filename
}



9 changes: 6 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,16 @@
"name": "pino-opentelemetry-transport",
"version": "3.0.0",
"description": "OpenTelemetry transport for Pino",
"main": "lib/pino-opentelemetry-transport.js",
"main": "lib/pino-opentelemetry-transport.mjs",
"scripts": {
"validate-and-test": "eslint && borp && tsd",
"build": "node examples/transport-string/build.js",
"test": "npm run validate-and-test",
"docker-run": "docker compose up",
"generate-types": "tsc",
"pretest-ci": "npm run generate-types",
"pretest": "npm run generate-types",
"prepack": "npm run generate-types"
"prepack": "npm run generate-types && npm run build"
},
"author": "Vladimir Adamic <vladimir.adamic@nearform.com>",
"repository": "github:pinojs/pino-opentelemetry-transport",
Expand All @@ -34,6 +35,7 @@
"@opentelemetry/sdk-node": "^0.213.0",
"@types/node": "^25.0.0",
"borp": "^1.0.0",
"esbuild": "^0.27.4",
"eslint": "^9.39.1",
"neostandard": "^0.12.2",
"pino": "^10.1.0",
Expand All @@ -50,7 +52,8 @@
"test"
],
"files": [
"lib",
"types",
"*.js"
"dist"
]
}
2 changes: 1 addition & 1 deletion tsconfig.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"include": ["lib/pino-opentelemetry-transport.js"],
"include": ["lib/pino-opentelemetry-transport.mjs"],
"compilerOptions": {
"skipLibCheck": true,
"allowJs": true,
Expand Down