{"_id":"@alex-michaud/pino-graylog-transport","_rev":"6-a04fd908d0946736de9312657d854d8a","name":"@alex-michaud/pino-graylog-transport","dist-tags":{"latest":"1.2.1"},"versions":{"1.0.2":{"name":"@alex-michaud/pino-graylog-transport","version":"1.0.2","keywords":["pino","transport","graylog","logging","gelf"],"author":{"name":"Alexandre Michaud","email":"alex-michaud@users.noreply.github.com"},"license":"MIT","_id":"@alex-michaud/pino-graylog-transport@1.0.2","maintainers":[{"name":"alex-michaud","email":"alex.michaud@gmail.com"}],"homepage":"https://github.com/alex-michaud/pino-graylog-transport#readme","bugs":{"url":"https://github.com/alex-michaud/pino-graylog-transport/issues"},"dist":{"shasum":"dfa5ab533de3dd48a1c0769926911aa38f1cd41c","tarball":"https://registry.npmjs.org/@alex-michaud/pino-graylog-transport/-/pino-graylog-transport-1.0.2.tgz","fileCount":15,"integrity":"sha512-ZRoK04YhvoypeTogcJ3va3rNSkc/DWqgnC19Y1gPApwJsy9q7/U2xgynKuLmRnsprAXDITlHYsnUjy1ILFlZfg==","signatures":[{"sig":"MEUCIQD2YqP6gr6t/g7KLODPWWQUwvAMvACQAZXsi8ozy5xadAIgH0WPtPVDiqDBMgjxWqnzNekbLvjV/W4/ZXKkjc7hnvk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52848},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"gitHead":"7d4f9d02c3c6c388629180bf6c040b9c6f4d3e32","scripts":{"ci":"biome ci .","lint":"biome check --write .","test":"npm run test:unit","build":"tsc","check":"biome check --write .","format":"biome format --write .","test:all":"mocha -r ts-node/register 'test/{unit,integration}/**/*.test.ts'","benchmark":"ts-node test/benchmark/benchmark.ts","docker:up":"docker compose up -d","test:load":"esbuild test/load/load-test.ts --bundle --outfile=dist/load-test.js --target=es2017 --format=esm --external:k6 --external:k6/* && (command -v k6 >/dev/null && k6 run dist/load-test.js || echo \"k6 not found. Install k6 to run load tests: https://k6.io/docs/getting-started/installation/\")","test:unit":"mocha -r ts-node/register 'test/unit/**/*.test.ts'","preinstall":"node scripts/check-node-version.js","test:smoke":"esbuild test/load/smoke-test.ts --bundle --outfile=dist/smoke-test.js --target=es2017 --format=esm --external:k6 --external:k6/* && (command -v k6 >/dev/null && k6 run dist/smoke-test.js || echo \"k6 not found. Install k6 to run load tests: https://k6.io/docs/getting-started/installation/\")","docker:down":"docker compose down","docker:setup":"ts-node scripts/setup-graylog.ts","benchmark:load":"esbuild test/benchmark/comparison-load-test.ts --bundle --outfile=dist/comparison-load-test.js --target=es2017 --format=esm --external:k6 --external:k6/* --tree-shaking=false --log-level=info && k6 run dist/comparison-load-test.js","prepublishOnly":"npm run build","test:integration":"EXECUTE_INTEGRATION=true mocha -r ts-node/register 'test/integration/**/*.test.ts'","start:load-server":"ts-node test/load/server.ts","start:comparison-server":"ts-node test/benchmark/comparison-server.ts"},"_npmUser":{"name":"alex-michaud","email":"alex.michaud@gmail.com"},"repository":{"url":"git+https://github.com/alex-michaud/pino-graylog-transport.git","type":"git"},"_npmVersion":"11.7.0","description":"Pino transport that sends log to graylog","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pino-abstract-transport":"3.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"chai":"6.2.2","pino":"10.1.0","mocha":"11.7.5","mitata":"^1.0.34","esbuild":"^0.27.2","ts-node":"^10.9.2","winston":"^3.19.0","@types/k6":"^1.4.0","@types/bun":"1.3.5","typescript":"^5.9.3","@types/chai":"^5.2.3","@types/node":"^25.0.3","@types/mocha":"^10.0.10","@biomejs/biome":"2.3.11","winston-log2gelf":"^2.4.1","winston-transport":"^4.9.0","@semantic-release/git":"^10.0.1","@semantic-release/github":"^12.0.2","@semantic-release/changelog":"^6.0.3","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0","conventional-changelog-conventionalcommits":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/pino-graylog-transport_1.0.2_1767755601957_0.03953067756019024","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@alex-michaud/pino-graylog-transport","version":"1.1.0","keywords":["pino","transport","graylog","logging","gelf"],"author":{"name":"Alexandre Michaud","email":"alex-michaud@users.noreply.github.com"},"license":"MIT","_id":"@alex-michaud/pino-graylog-transport@1.1.0","maintainers":[{"name":"alex-michaud","email":"alex.michaud@gmail.com"}],"homepage":"https://github.com/alex-michaud/pino-graylog-transport#readme","bugs":{"url":"https://github.com/alex-michaud/pino-graylog-transport/issues"},"dist":{"shasum":"39680c72735065f5249b4deb2a5788b8e16d3913","tarball":"https://registry.npmjs.org/@alex-michaud/pino-graylog-transport/-/pino-graylog-transport-1.1.0.tgz","fileCount":15,"integrity":"sha512-+7wgEp9P+sUquTZ4rJ3mRvTmm4kZ5pV5p35I1DzHu+KTiQbzbFMNQ81sbiin3P4ayC/aSwDUh3nC/O6i440l/Q==","signatures":[{"sig":"MEQCIDsyh+tAP4yzfLwZjeWXZ+XO1B9voUFJZWHqsqdqMh+JAiAeCsMBKCJrzlgawWzrxBhknKOkoReNNfoADcM4yLutbw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52989},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"gitHead":"438ed6389d2e54d0ed575adcc465f01128c7eae7","scripts":{"ci":"biome ci .","lint":"biome check --write .","test":"npm run test:unit","build":"tsc","check":"biome check --write .","format":"biome format --write .","test:all":"mocha -r ts-node/register 'test/{unit,integration}/**/*.test.ts'","benchmark":"ts-node test/benchmark/benchmark.ts","docker:up":"docker compose up -d","test:load":"esbuild test/load/load-test.ts --bundle --outfile=dist/load-test.js --target=es2017 --format=esm --external:k6 --external:k6/* && (command -v k6 >/dev/null && k6 run dist/load-test.js || echo \"k6 not found. Install k6 to run load tests: https://k6.io/docs/getting-started/installation/\")","test:unit":"mocha -r ts-node/register 'test/unit/**/*.test.ts'","preinstall":"node scripts/check-node-version.js","test:smoke":"esbuild test/load/smoke-test.ts --bundle --outfile=dist/smoke-test.js --target=es2017 --format=esm --external:k6 --external:k6/* && (command -v k6 >/dev/null && k6 run dist/smoke-test.js || echo \"k6 not found. Install k6 to run load tests: https://k6.io/docs/getting-started/installation/\")","docker:down":"docker compose down","docker:setup":"ts-node scripts/setup-graylog.ts","benchmark:load":"esbuild test/benchmark/comparison-load-test.ts --bundle --outfile=dist/comparison-load-test.js --target=es2017 --format=esm --external:k6 --external:k6/* --tree-shaking=false --log-level=info && k6 run dist/comparison-load-test.js","prepublishOnly":"npm run build","test:integration":"EXECUTE_INTEGRATION=true mocha -r ts-node/register 'test/integration/**/*.test.ts'","start:load-server":"ts-node test/load/server.ts","start:comparison-server":"ts-node test/benchmark/comparison-server.ts"},"_npmUser":{"name":"alex-michaud","email":"alex.michaud@gmail.com"},"repository":{"url":"git+https://github.com/alex-michaud/pino-graylog-transport.git","type":"git"},"_npmVersion":"11.7.0","description":"Pino transport that sends log to graylog","directories":{},"_nodeVersion":"24.12.0","dependencies":{"pino-abstract-transport":"3.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"chai":"6.2.2","pino":"10.1.0","mocha":"11.7.5","mitata":"^1.0.34","esbuild":"^0.27.2","ts-node":"^10.9.2","winston":"^3.19.0","@types/k6":"^1.4.0","@types/bun":"1.3.5","typescript":"^5.9.3","@types/chai":"^5.2.3","@types/node":"^25.0.3","@types/mocha":"^10.0.10","@biomejs/biome":"2.3.11","winston-log2gelf":"^2.4.1","winston-transport":"^4.9.0","@semantic-release/git":"^10.0.1","@semantic-release/github":"^12.0.2","@semantic-release/changelog":"^6.0.3","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0","conventional-changelog-conventionalcommits":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/pino-graylog-transport_1.1.0_1767809789549_0.3023079323168216","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@alex-michaud/pino-graylog-transport","version":"1.1.1","keywords":["pino","transport","graylog","logging","gelf"],"author":{"name":"Alexandre Michaud","email":"alex-michaud@users.noreply.github.com"},"license":"MIT","_id":"@alex-michaud/pino-graylog-transport@1.1.1","maintainers":[{"name":"alex-michaud","email":"alex.michaud@gmail.com"}],"homepage":"https://github.com/alex-michaud/pino-graylog-transport#readme","bugs":{"url":"https://github.com/alex-michaud/pino-graylog-transport/issues"},"dist":{"shasum":"9e536088c026d7bb40c833028e6efef597deab1a","tarball":"https://registry.npmjs.org/@alex-michaud/pino-graylog-transport/-/pino-graylog-transport-1.1.1.tgz","fileCount":15,"integrity":"sha512-K6kqEm77AbrLXyfYeYd6SYwspU0OyaWTaue1ynK2842WOu9Q5eeiLLOV/TZv9lvPXMCnw0aKIexC7iPMMKi57g==","signatures":[{"sig":"MEUCIAInvbZ0bqKhbVgdGMbxdhl1cRU8niaBF5bJL8bDvWq6AiEAszehxvT8OmurI7GmIK7M55B58g7lgt81LtXhsErySDI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52925},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"gitHead":"529fbe849a0b8865d260148b4405f3027d948a3b","scripts":{"ci":"biome ci .","lint":"biome check --write .","test":"npm run test:unit","build":"tsc","check":"biome check --write .","format":"biome format --write .","test:all":"mocha -r ts-node/register 'test/{unit,integration}/**/*.test.ts'","benchmark":"ts-node test/benchmark/benchmark.ts","docker:up":"docker compose up -d","test:load":"esbuild test/load/load-test.ts --bundle --outfile=dist/load-test.js --target=es2017 --format=esm --external:k6 --external:k6/* && (command -v k6 >/dev/null && k6 run dist/load-test.js || echo \"k6 not found. Install k6 to run load tests: https://k6.io/docs/getting-started/installation/\")","test:unit":"mocha -r ts-node/register 'test/unit/**/*.test.ts'","preinstall":"node scripts/check-node-version.js","test:smoke":"esbuild test/load/smoke-test.ts --bundle --outfile=dist/smoke-test.js --target=es2017 --format=esm --external:k6 --external:k6/* && (command -v k6 >/dev/null && k6 run dist/smoke-test.js || echo \"k6 not found. Install k6 to run load tests: https://k6.io/docs/getting-started/installation/\")","docker:down":"docker compose down","docker:setup":"ts-node scripts/setup-graylog.ts","benchmark:load":"esbuild test/benchmark/comparison-load-test.ts --bundle --outfile=dist/comparison-load-test.js --target=es2017 --format=esm --external:k6 --external:k6/* --tree-shaking=false --log-level=info && k6 run dist/comparison-load-test.js","prepublishOnly":"npm run build","test:integration":"EXECUTE_INTEGRATION=true mocha -r ts-node/register 'test/integration/**/*.test.ts'","start:load-server":"ts-node test/load/server.ts","start:comparison-server":"ts-node test/benchmark/comparison-server.ts"},"_npmUser":{"name":"alex-michaud","email":"alex.michaud@gmail.com"},"repository":{"url":"git+https://github.com/alex-michaud/pino-graylog-transport.git","type":"git"},"_npmVersion":"11.7.0","description":"Pino transport that sends log to graylog","directories":{},"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"chai":"6.2.2","pino":"10.1.0","mocha":"11.7.5","mitata":"^1.0.34","esbuild":"^0.27.2","ts-node":"^10.9.2","winston":"^3.19.0","@types/k6":"^1.4.0","@types/bun":"1.3.5","typescript":"^5.9.3","@types/chai":"^5.2.3","@types/node":"^25.0.3","@types/mocha":"^10.0.10","@biomejs/biome":"2.3.11","winston-log2gelf":"^2.4.1","winston-transport":"^4.9.0","@semantic-release/git":"^10.0.1","@semantic-release/github":"^12.0.2","@semantic-release/changelog":"^6.0.3","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0","conventional-changelog-conventionalcommits":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/pino-graylog-transport_1.1.1_1767890399507_0.5489776340220269","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@alex-michaud/pino-graylog-transport","version":"1.1.2","keywords":["pino","transport","graylog","logging","gelf"],"author":{"name":"Alexandre Michaud","email":"alex-michaud@users.noreply.github.com"},"license":"MIT","_id":"@alex-michaud/pino-graylog-transport@1.1.2","maintainers":[{"name":"alex-michaud","email":"alex.michaud@gmail.com"}],"homepage":"https://github.com/alex-michaud/pino-graylog-transport#readme","bugs":{"url":"https://github.com/alex-michaud/pino-graylog-transport/issues"},"dist":{"shasum":"d296488dac1ef92715f5b61de80395ac493060ee","tarball":"https://registry.npmjs.org/@alex-michaud/pino-graylog-transport/-/pino-graylog-transport-1.1.2.tgz","fileCount":15,"integrity":"sha512-C18cEo8TQgx0HGexssZku8jSRTRqxXRKbpHo4qEpFU7O2PAFFSimVeIl31AGqaiNpSKfhZ1bQ196cP3s4IxKZg==","signatures":[{"sig":"MEYCIQCMrL2zELC9CRGeLU11ozr/m/9cWHHaJu+FES4UklH3FAIhALr5g8I55mmGkNQ/GISqJGAbneyycMer47gpjJBaqssc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":52869},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"gitHead":"f9c84f2a5be7f03c1080d65b8a54e1726f1e8358","scripts":{"ci":"biome ci .","lint":"biome check --write .","test":"npm run test:unit","build":"tsc","check":"biome check --write .","format":"biome format --write .","test:all":"mocha -r ts-node/register 'test/{unit,integration}/**/*.test.ts'","benchmark":"ts-node test/benchmark/benchmark.ts","docker:up":"docker compose up -d","test:load":"esbuild test/load/load-test.ts --bundle --outfile=dist/load-test.js --target=es2017 --format=esm --external:k6 --external:k6/* && (command -v k6 >/dev/null && k6 run dist/load-test.js || echo \"k6 not found. Install k6 to run load tests: https://k6.io/docs/getting-started/installation/\")","test:unit":"mocha -r ts-node/register 'test/unit/**/*.test.ts'","test:smoke":"esbuild test/load/smoke-test.ts --bundle --outfile=dist/smoke-test.js --target=es2017 --format=esm --external:k6 --external:k6/* && (command -v k6 >/dev/null && k6 run dist/smoke-test.js || echo \"k6 not found. Install k6 to run load tests: https://k6.io/docs/getting-started/installation/\")","docker:down":"docker compose down","docker:setup":"ts-node scripts/setup-graylog.ts","benchmark:load":"esbuild test/benchmark/comparison-load-test.ts --bundle --outfile=dist/comparison-load-test.js --target=es2017 --format=esm --external:k6 --external:k6/* --tree-shaking=false --log-level=info && k6 run dist/comparison-load-test.js","prepublishOnly":"npm run build","test:integration":"EXECUTE_INTEGRATION=true mocha -r ts-node/register 'test/integration/**/*.test.ts'","start:load-server":"ts-node test/load/server.ts","start:comparison-server":"ts-node test/benchmark/comparison-server.ts"},"_npmUser":{"name":"alex-michaud","email":"alex.michaud@gmail.com"},"repository":{"url":"git+https://github.com/alex-michaud/pino-graylog-transport.git","type":"git"},"_npmVersion":"11.7.0","description":"Pino transport that sends log to graylog","directories":{},"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"chai":"6.2.2","pino":"10.1.0","mocha":"11.7.5","mitata":"^1.0.34","esbuild":"^0.27.2","ts-node":"^10.9.2","winston":"^3.19.0","@types/k6":"^1.4.0","@types/bun":"1.3.5","typescript":"^5.9.3","@types/chai":"^5.2.3","@types/node":"^25.0.3","@types/mocha":"^10.0.10","@biomejs/biome":"2.3.11","winston-log2gelf":"^2.4.1","winston-transport":"^4.9.0","@semantic-release/git":"^10.0.1","@semantic-release/github":"^12.0.2","@semantic-release/changelog":"^6.0.3","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0","conventional-changelog-conventionalcommits":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/pino-graylog-transport_1.1.2_1768150889954_0.11120908127583862","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@alex-michaud/pino-graylog-transport","version":"1.2.0","keywords":["pino","transport","graylog","logging","gelf"],"author":{"name":"Alexandre Michaud","email":"alex-michaud@users.noreply.github.com"},"license":"MIT","_id":"@alex-michaud/pino-graylog-transport@1.2.0","maintainers":[{"name":"alex-michaud","email":"alex.michaud@gmail.com"}],"homepage":"https://github.com/alex-michaud/pino-graylog-transport#readme","bugs":{"url":"https://github.com/alex-michaud/pino-graylog-transport/issues"},"dist":{"shasum":"80e876f8539b810880950d04321181f7a384f43d","tarball":"https://registry.npmjs.org/@alex-michaud/pino-graylog-transport/-/pino-graylog-transport-1.2.0.tgz","fileCount":15,"integrity":"sha512-nnH6dU1FdjngqdOhSdT+M2YnSDChX0LuHJrCR+8MRGWx4jKPmAlmcd6cQMxz8bTItDxfx1snDX1snVdUJ2z67g==","signatures":[{"sig":"MEUCIFWWyLUnOSnt3KLSko+bxL4itd00+7+MhdmAUjavUGodAiEA39LBYcGHL0eBijvfjDD557DQ6BJj8GyUUBAn7yiGqwU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":60335},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=22.0.0"},"gitHead":"5dbeb5cf368f22f52e4994eac8afb3a3db4cf65d","scripts":{"ci":"biome ci .","lint":"biome check --write .","test":"npm run test:unit","build":"tsc","check":"biome check --write .","format":"biome format --write .","test:all":"mocha -r ts-node/register 'test/{unit,integration}/**/*.test.ts'","benchmark":"ts-node test/benchmark/benchmark.ts","docker:up":"docker compose up -d","test:load":"esbuild test/load/load-test.ts --bundle --outfile=dist/load-test.js --target=es2017 --format=esm --external:k6 --external:k6/* && (command -v k6 >/dev/null && k6 run dist/load-test.js || echo \"k6 not found. Install k6 to run load tests: https://k6.io/docs/getting-started/installation/\")","test:unit":"mocha -r ts-node/register 'test/unit/**/*.test.ts'","test:smoke":"esbuild test/load/smoke-test.ts --bundle --outfile=dist/smoke-test.js --target=es2017 --format=esm --external:k6 --external:k6/* && (command -v k6 >/dev/null && k6 run dist/smoke-test.js || echo \"k6 not found. Install k6 to run load tests: https://k6.io/docs/getting-started/installation/\")","docker:down":"docker compose down","docker:setup":"ts-node scripts/setup-graylog.ts","benchmark:load":"npm run build && esbuild test/benchmark/comparison-load-test.ts --bundle --outfile=dist/comparison-load-test.js --target=es2017 --format=esm --external:k6 --external:k6/* --tree-shaking=false --log-level=info && k6 run dist/comparison-load-test.js","prepublishOnly":"npm run build","test:integration":"EXECUTE_INTEGRATION=true mocha -r ts-node/register 'test/integration/**/*.test.ts'","start:load-server":"ts-node test/load/server.ts","start:load-server:bun":"bun run test/load/server.ts","start:comparison-server":"npm run build && ts-node test/benchmark/comparison-server.ts","start:comparison-server:bun":"npm run build && bun run test/benchmark/comparison-server.ts"},"_npmUser":{"name":"alex-michaud","email":"alex.michaud@gmail.com"},"repository":{"url":"git+https://github.com/alex-michaud/pino-graylog-transport.git","type":"git"},"_npmVersion":"11.7.0","description":"Pino transport that sends log to graylog","directories":{},"_nodeVersion":"24.12.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"chai":"6.2.2","pino":"10.1.0","mocha":"11.7.5","mitata":"^1.0.34","esbuild":"^0.27.2","ts-node":"^10.9.2","winston":"^3.19.0","@types/k6":"^1.4.0","@types/bun":"1.3.5","typescript":"^5.9.3","@types/chai":"^5.2.3","@types/node":"^25.0.3","@types/mocha":"^10.0.10","@biomejs/biome":"2.3.11","winston-log2gelf":"^2.4.1","winston-transport":"^4.9.0","@semantic-release/git":"^10.0.1","@semantic-release/github":"^12.0.2","@semantic-release/changelog":"^6.0.3","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/release-notes-generator":"^14.1.0","conventional-changelog-conventionalcommits":"^8.0.0"},"_npmOperationalInternal":{"tmp":"tmp/pino-graylog-transport_1.2.0_1768193303718_0.9000056928809581","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@alex-michaud/pino-graylog-transport","version":"1.2.1","author":{"name":"Alexandre Michaud","email":"alex-michaud@users.noreply.github.com"},"repository":{"type":"git","url":"git+https://github.com/alex-michaud/pino-graylog-transport.git"},"main":"dist/index.js","devDependencies":{"@biomejs/biome":"2.3.11","@semantic-release/changelog":"^6.0.3","@semantic-release/commit-analyzer":"^13.0.1","@semantic-release/git":"^10.0.1","@semantic-release/github":"^12.0.2","@semantic-release/release-notes-generator":"^14.1.0","@types/bun":"1.3.5","conventional-changelog-conventionalcommits":"^8.0.0","@types/chai":"^5.2.3","@types/k6":"^1.4.0","@types/mocha":"^10.0.10","@types/node":"^25.0.3","chai":"6.2.2","esbuild":"^0.27.2","mitata":"^1.0.34","mocha":"11.7.5","pino":"10.1.0","ts-node":"^10.9.2","typescript":"^5.9.3","winston":"^3.19.0","winston-log2gelf":"^2.4.1","winston-transport":"^4.9.0"},"bugs":{"url":"https://github.com/alex-michaud/pino-graylog-transport/issues"},"description":"Pino transport that sends log to graylog","engines":{"node":">=22.0.0"},"homepage":"https://github.com/alex-michaud/pino-graylog-transport#readme","keywords":["pino","transport","graylog","logging","gelf"],"license":"MIT","publishConfig":{"access":"public"},"scripts":{"build":"tsc","prepublishOnly":"npm run build","test":"npm run test:unit","test:unit":"mocha -r ts-node/register 'test/unit/**/*.test.ts'","test:integration":"EXECUTE_INTEGRATION=true mocha -r ts-node/register 'test/integration/**/*.test.ts'","test:all":"mocha -r ts-node/register 'test/{unit,integration}/**/*.test.ts'","test:load":"esbuild test/load/load-test.ts --bundle --outfile=dist/load-test.js --target=es2017 --format=esm --external:k6 --external:k6/* && (command -v k6 >/dev/null && k6 run dist/load-test.js || echo \"k6 not found. Install k6 to run load tests: https://k6.io/docs/getting-started/installation/\")","test:smoke":"esbuild test/load/smoke-test.ts --bundle --outfile=dist/smoke-test.js --target=es2017 --format=esm --external:k6 --external:k6/* && (command -v k6 >/dev/null && k6 run dist/smoke-test.js || echo \"k6 not found. Install k6 to run load tests: https://k6.io/docs/getting-started/installation/\")","benchmark":"ts-node test/benchmark/benchmark.ts","benchmark:load":"npm run build && esbuild test/benchmark/comparison-load-test.ts --bundle --outfile=dist/comparison-load-test.js --target=es2017 --format=esm --external:k6 --external:k6/* --tree-shaking=false --log-level=info && k6 run dist/comparison-load-test.js","start:comparison-server":"npm run build && ts-node test/benchmark/comparison-server.ts","start:comparison-server:bun":"npm run build && bun run test/benchmark/comparison-server.ts","start:load-server":"ts-node test/load/server.ts","start:load-server:bun":"bun run test/load/server.ts","lint":"biome check --write .","format":"biome format --write .","check":"biome check --write .","ci":"biome ci .","docker:up":"docker compose up -d","docker:down":"docker compose down","docker:setup":"ts-node scripts/setup-graylog.ts"},"types":"dist/index.d.ts","gitHead":"dd4ec3c5b2d8c693db9b1c49f538e47622dd9321","_id":"@alex-michaud/pino-graylog-transport@1.2.1","_nodeVersion":"24.12.0","_npmVersion":"11.7.0","dist":{"integrity":"sha512-GouAWe3Yvg8IY0pxwEm8yzTYWzHmnaG5Z9ZXKyklj0D/njlPQmiqTGy0qzvjSMhlJqTHBtxt0LGXloFft8E5pQ==","shasum":"1ed834f78ba8beecef47dbbc23c5aa640d3bae87","tarball":"https://registry.npmjs.org/@alex-michaud/pino-graylog-transport/-/pino-graylog-transport-1.2.1.tgz","fileCount":19,"unpackedSize":70280,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIDYMSblMCSZPW1KI4N0MhRSeHgMTD/DgwYwv71yD8J8hAiBMrhHvRvOIPo0q2XoAoG2uOOZcZoN/qvdIWPiggK/nOw=="}]},"_npmUser":{"name":"alex-michaud","email":"alex.michaud@gmail.com"},"directories":{},"maintainers":[{"name":"alex-michaud","email":"alex.michaud@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pino-graylog-transport_1.2.1_1768267042438_0.3042477352469639"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-07T03:13:21.822Z","modified":"2026-01-13T01:17:22.763Z","1.0.2":"2026-01-07T03:13:22.113Z","1.1.0":"2026-01-07T18:16:29.756Z","1.1.1":"2026-01-08T16:39:59.649Z","1.1.2":"2026-01-11T17:01:30.100Z","1.2.0":"2026-01-12T04:48:23.857Z","1.2.1":"2026-01-13T01:17:22.580Z"},"bugs":{"url":"https://github.com/alex-michaud/pino-graylog-transport/issues"},"author":{"name":"Alexandre Michaud","email":"alex-michaud@users.noreply.github.com"},"license":"MIT","homepage":"https://github.com/alex-michaud/pino-graylog-transport#readme","keywords":["pino","transport","graylog","logging","gelf"],"repository":{"type":"git","url":"git+https://github.com/alex-michaud/pino-graylog-transport.git"},"description":"Pino transport that sends log to graylog","maintainers":[{"name":"alex-michaud","email":"alex.michaud@gmail.com"}],"readme":"# pino-graylog-transport\n\nA Pino transport module that sends log messages to Graylog using the GELF (Graylog Extended Log Format) protocol over TCP, TLS, or UDP.\n\n## Features\n\n- 🚀 Full support for Pino transports API\n- 📦 GELF (Graylog Extended Log Format) message formatting\n- 🔒 TLS, TCP, and UDP protocol support (TLS secure by default)\n- 🔧 Configurable facility, host, and port\n- 📊 Automatic log level conversion (Pino → Syslog)\n- 🏷️ Custom field support with GELF underscore prefix\n- ⚡ High-performance async message sending with buffering and reconnection logic\n\n## Installation\n\n```bash\nnpm install @alex-michaud/pino-graylog-transport pino\n```\n\n## Publishing & Installation\n\nThis package is published under the scope `@alex-michaud`. To install, use the following command:\n\n```bash\nnpm install @alex-michaud/pino-graylog-transport\n```\n\nIf you encounter permissions issues, you may need to add `--access public` to the install command:\n\n```bash\nnpm install @alex-michaud/pino-graylog-transport --access public\n```\n\n## Quick Start\n\n```javascript\nconst pino = require('pino');\nconst transport = require('@alex-michaud/pino-graylog-transport');\n\nconst transportInstance = transport({\n  host: 'graylog.example.com',\n  port: 12201,\n  // TLS is the default for secure transmission over networks\n  // Use protocol: 'tcp' only for local development (localhost)\n  protocol: 'tls',\n  facility: 'my-app',\n  staticMeta: {\n    environment: 'production',\n    service: 'api',\n    version: '1.0.0'\n  }\n});\n\nconst logger = pino(transportInstance);\n\nlogger.info('Hello Graylog!');\n```\n\n## Configuration Options\n\n| Option | Type | Default | Description |\n|--------|------|---------|-------------|\n| `host` | string | `'localhost'` | Graylog server hostname |\n| `port` | number | `12201` | Graylog GELF input port (standard GELF TCP port) |\n| `protocol` | string | `'tls'` | Protocol to use (`'tcp'`, `'tls'`, or `'udp'`). **Default is `'tls'` for security** - uses encrypted connection to prevent exposure of sensitive data. Use `'tcp'` only for local development. Use `'udp'` for high-throughput scenarios where delivery guarantees are not required. |\n| `facility` | string | `hostname` | **Application/service identifier** sent with every message. Used to categorize logs by application in Graylog (e.g., `'api-gateway'`, `'auth-service'`). Sent as `_facility` additional field per [GELF spec](https://go2docs.graylog.org/current/getting_in_log_data/gelf.html). |\n| `hostname` | string | `os.hostname()` | Host field in GELF messages (the machine/server name) |\n| `staticMeta` | object | `{}` | Static fields included in **every** log message (e.g., auth tokens, environment, datacenter). These are sent as GELF custom fields with underscore prefix. |\n| `maxQueueSize` | number | `1000` | Max messages to queue when disconnected |\n| `onError` | function | `console.error` | Custom error handler |\n| `onReady` | function | `undefined` | Callback when connection is established |\n| `autoConnect` | boolean | `true` | If `false`, don't establish connection on initialization. Only applies to TCP/TLS; UDP always initializes immediately since it's connectionless. |\n\n### ⚠️ Security Note\n\nThe default protocol is **`tls`** to ensure logs are transmitted securely over encrypted connections. This is important when:\n- Sending logs over untrusted networks (internet, shared corporate networks)\n- Including authentication tokens in `staticMeta` (e.g., `'X-OVH-TOKEN'`)\n- Logging sensitive data (PII, API keys, internal URLs)\n\nOnly use `protocol: 'tcp'` for local development when Graylog is running on `localhost`.\n\n## Using with Authentication Tokens\n\nSome Graylog services require authentication tokens to be sent with every log message. Use `staticMeta` to include these tokens and any other metadata that should be sent with **all** log messages:\n\n```javascript\nconst transport = require('@alex-michaud/pino-graylog-transport');\n\n// Example: OVH Logs Data Platform\nconst stream = transport({\n  host: 'bhs1.logs.ovh.com',\n  port: 12202,\n  protocol: 'tls',\n  staticMeta: {\n    'X-OVH-TOKEN': 'your-ovh-token-here'\n  }\n});\n\n// Example: Generic cloud provider with token\nconst stream = transport({\n  host: 'graylog.example.com',\n  port: 12201,\n  protocol: 'tls',\n  staticMeta: {\n    token: 'your-auth-token',\n    environment: 'production',\n    datacenter: 'us-east-1'\n  }\n});\n```\n\nAll fields in `staticMeta` will be included in every GELF message with an underscore prefix (e.g., `_X-OVH-TOKEN`, `_token`, `_environment`).\n\n## Understanding Configuration Fields\n\n### `facility` vs `hostname` vs `staticMeta`\n\nThese three configuration options serve different purposes:\n\n| Field | Purpose | Example | GELF Field | When to Use |\n|-------|---------|---------|------------|-------------|\n| `facility` | **Application/service identifier** | `'api-gateway'`, `'auth-service'` | `_facility` | Identify which application/microservice sent the log |\n| `hostname` | **Machine/server identifier** | `'web-server-01'`, `'us-east-1a'` | `host` | Identify which machine/container/pod sent the log |\n| `staticMeta` | **Context metadata** | `{ token: 'abc', env: 'prod' }` | `_token`, `_env` | Add authentication tokens or contextual info |\n\n### Example: Microservices Architecture\n\n```javascript\n// API Gateway service running on server 1\ntransport({\n  facility: 'api-gateway',        // What service?\n  hostname: 'web-server-01',      // Which machine?\n  staticMeta: {\n    environment: 'production',    // Extra context\n    region: 'us-east-1',\n    version: '2.1.0'\n  }\n});\n\n// Auth Service running on server 2\ntransport({\n  facility: 'auth-service',       // What service?\n  hostname: 'web-server-02',      // Which machine?\n  staticMeta: {\n    environment: 'production',\n    region: 'us-east-1',\n    version: '1.5.3'\n  }\n});\n```\n\nIn Graylog, you can then:\n- Filter by `_facility:api-gateway` to see all API gateway logs\n- Filter by `host:web-server-01` to see all logs from that server\n- Filter by `_environment:production` to see production logs across all services\n\n## Local Development with Docker\n\nThis repository includes a Docker Compose configuration to run Graylog locally for testing.\n\n### Start Graylog\n\n```bash\nnpm run docker:up\n# or\ndocker compose up -d\n```\n\nWait about 30 seconds for Graylog to fully start, then run the setup script to create the GELF inputs:\n\n```bash\nnpm run docker:setup\n```\n\nThen access the web interface at:\n- URL: http://localhost:9005\n- Username: `admin`\n- Password: `admin`\n\n### Stop Graylog\n\n```bash\nnpm run docker:down\n# or\ndocker compose down\n```\n\n## Usage Examples\n\n### Basic Logging\n\n```javascript\nconst pino = require('pino');\nconst transport = require('@alex-michaud/pino-graylog-transport');\n\n// For local development (localhost)\nconst logger = pino(transport({\n  host: 'localhost',\n  port: 12201,\n  protocol: 'tcp'  // Safe to use TCP for localhost\n}));\n\nlogger.info('Application started');\nlogger.warn('Warning message');\nlogger.error('Error message');\n```\n\n### Logging with Custom Fields\n\n```javascript\nlogger.info({\n  userId: 123,\n  action: 'login',\n  ip: '192.168.1.1'\n}, 'User logged in');\n\n// In Graylog, these will appear as: _userId, _action, _ip\n```\n\n### Error Logging with Stack Traces\n\n```javascript\ntry {\n  throw new Error('Something went wrong!');\n} catch (err) {\n  logger.error({ err }, 'An error occurred');\n  // Stack trace will be sent as full_message in GELF\n}\n```\n\n### TCP Protocol\n\n```javascript\nconst logger = pino(await transport({\n  host: 'localhost',\n  port: 12201,\n  protocol: 'tcp'  // Use TCP instead of TLS\n}));\n```\n\n### UDP Protocol\n\n```javascript\nconst logger = pino(await transport({\n  host: 'localhost',\n  port: 12201,\n  protocol: 'udp'  // Use UDP for high-throughput, fire-and-forget logging\n}));\n```\n\n**Note:** UDP is connectionless and does not guarantee message delivery. Use it when:\n- You need maximum throughput\n- Occasional message loss is acceptable\n- You're logging to a local Graylog instance\n- Network reliability is high\n\n**UDP Limitations:**\n- Messages are limited to **8KB (8192 bytes)** per GELF UDP specification\n- Messages exceeding this size are **rejected** (not sent)\n- For large messages, use TCP or TLS protocols instead\n- No delivery guarantees (fire-and-forget)\n\n**Bun Runtime:** When running under [Bun](https://bun.sh/), the UDP transport automatically uses Bun's native `Bun.udpSocket()` API for better performance. Falls back to Node's `dgram` module if unavailable.\n\n### Run the Example\n\n```bash\n# Start Graylog first\nnpm run docker:up\n\n# Run the example (after installing dependencies)\nnpm install\nnode examples/basic.js\n\n# View logs at http://localhost:9005\n```\n\n## Testing\n\n### Install Dependencies\n\n```bash\nnpm install\n```\n\n### Unit Tests\n\nRun the library functionality tests (no external dependencies required):\n\n```bash\nnpm test\n# or\nnpm run test:unit\n```\n\n### Integration Tests\n\nIntegration tests require a running Graylog instance:\n\n```bash\n# Start Graylog first\nnpm run docker:up\nnpm run docker:setup\n\n# Run integration tests\nnpm run test:integration\n```\n\n### Run All Tests\n\nRun both unit and integration tests:\n\n```bash\nnpm run test:all\n```\n\n### Load Tests with k6\n\nLoad tests use [k6](https://k6.io) to simulate high-volume logging scenarios.\n\n#### Install k6\n\n```bash\n# macOS\nbrew install k6\n```\n```bash\n# Linux\nsudo gpg -k\nsudo gpg --no-default-keyring --keyring /usr/share/keyrings/k6-archive-keyring.gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys C5AD17C747E3415A3642D57D77C6C491D6AC1D69\necho \"deb [signed-by=/usr/share/keyrings/k6-archive-keyring.gpg] https://dl.k6.io/deb stable main\" | sudo tee /etc/apt/sources.list.d/k6.list\nsudo apt-get update\nsudo apt-get install k6\n```\n\n```bash\n# Windows\nchoco install k6\n```\n\n#### Run Load Tests\n\n```bash\n# Start Graylog\nnpm run docker:up\n\n# Setup Graylog inputs (wait for Graylog to be ready first)\nnpm run docker:setup\n\n# Start the load test server\nnpm run start:load-server\n\n# In another terminal, run the k6 load test\nnpm run test:load\n\n# Or run a quick smoke test (20 seconds)\nnpm run test:smoke\n```\n\nThe load test will:\n- Ramp up from 0 to 50 virtual users\n- Send thousands of log messages\n- Measure throughput and latency\n- Verify 95% success rate\n\n## Project Structure\n\n```\npino-graylog-transport/\n├── lib/                    # Source code\n│   ├── index.ts           # Main transport entry point\n│   ├── gelf-formatter.ts  # GELF message formatter\n│   └── graylog-transport.ts # TCP/TLS transport\n├── test/                  # Tests\n│   ├── unit/             # Unit tests\n│   │   ├── gelf-formatter.test.ts\n│   │   ├── graylog-transport.test.ts\n│   │   └── integration.test.ts\n│   ├── load/             # Load tests\n│   │   ├── load-test.ts  # k6 load test script\n│   │   ├── smoke-test.ts # k6 smoke test script\n│   │   └── server.ts     # Test server for load testing\n│   └── benchmark/        # Performance benchmarks\n│       ├── benchmark.ts            # Microbenchmark (formatting)\n│       ├── comparison-server.ts    # Server for pino vs winston test\n│       └── comparison-load-test.ts # k6 comparison load test\n├── examples/             # Usage examples\n│   └── basic.js\n├── docker-compose.yml    # Graylog local setup\n└── package.json\n```\n\n## Log Level Mapping\n\nPino log levels are automatically converted to Syslog severity levels for Graylog:\n\n| Pino Level | Numeric | Syslog Level | Numeric |\n|------------|---------|--------------|---------|\n| fatal      | 60      | Critical     | 2       |\n| error      | 50      | Error        | 3       |\n| warn       | 40      | Warning      | 4       |\n| info       | 30      | Informational| 6       |\n| debug      | 20      | Debug        | 7       |\n| trace      | 10      | Debug        | 7       |\n\n## GELF Message Format\n\nThe transport converts Pino log objects to GELF format:\n\n- `short_message`: The log message\n- `full_message`: Stack trace (if present)\n- `level`: Syslog severity level\n- `timestamp`: Unix timestamp\n- `host`: Hostname\n- `facility`: Application/service name\n- `_*`: Custom fields (all Pino log object properties)\n\n## Performance\n\nThe GELF formatting logic is optimized for speed. Benchmarks were run using [mitata](https://github.com/evanwashere/mitata) to measure the overhead of message transformation (excluding network I/O).\n\n### Benchmark Results\n\n| Benchmark | Time | Description |\n|-----------|------|-------------|\n| JSON.stringify (Raw) | 615 ns | Baseline - just serialization, no transformation |\n| **pino-graylog-transport** | **1.29 µs** | Our GELF formatter |\n| Manual GELF Construction | 1.88 µs | Simulated naive implementation |\n\n### Key Takeaways\n\n- ✅ **31% faster** than a naive manual GELF construction approach\n- ✅ **~775,000 messages/second** theoretical formatting throughput (single-threaded)\n- ✅ **Negligible overhead**: The ~0.67 µs formatting overhead is 1000-100,000x smaller than typical network latency\n\n### Run Benchmarks\n\n```bash\n# Run formatting microbenchmark (no network)\nnpm run benchmark\n```\n\n### Comparison Load Test (pino vs winston)\n\nThis test compares the real-world performance of `@alex-michaud/pino-graylog-transport` against `winston + winston-log2gelf`:\n\n```bash\n# Start Graylog\nnpm run docker:up\nnpm run docker:setup\n\n# Start the comparison server (in one terminal)\nnpm run start:comparison-server\n\n# Run the comparison load test (in another terminal)\nnpm run benchmark:load\n```\n\nThe test runs three scenarios in parallel:\n- **Baseline**: No logging (measures pure HTTP overhead)\n- **Pino**: Using @alex-michaud/pino-graylog-transport\n- **Winston**: Using winston + winston-log2gelf\n\nCompare the `*_duration` metrics to see the logging overhead for each library.\n\n### Latest Benchmark Results (January 2026)\n\nTests performed on a local development machine using k6 (10s duration, 50 VUs).\n\n#### Node.js Runtime\n| Library | Requests/sec | Relative Performance |\n|---------|--------------|----------------------|\n| Baseline (No logs) | ~2,502 | 100% |\n| **Pino Graylog** | **~1,355** | **54%** |\n| Winston (log2gelf) | ~1,183 | 47% |\n\n#### Bun Runtime 🚀\n| Library | Requests/sec | Relative Performance |\n|---------|--------------|----------------------|\n| Baseline (No logs) | ~2,472 | 100% |\n| **Pino Graylog** | **~2,005** | **81%** |\n| Winston (log2gelf) | ~1,209 | 49% |\n\n> **Performance Tip:** Using the **Bun** runtime with `@alex-michaud/pino-graylog-transport` yields a massive performance boost, maintaining over **80% of the baseline throughput** (compared to ~54% on Node.js) while outperforming Winston by a significant margin.\n\n## License\n\nMIT — see the [LICENSE](./LICENSE) file for details.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request.\n\n## Requirements\n\n[![Node.js Version](https://img.shields.io/badge/node-%3E%3D22-brightgreen.svg)](https://nodejs.org/)\n\nThis package requires Node.js >= 22 (declared in package.json `engines`). The CI and release workflows prefer the latest Node LTS. If your local Node version is older, upgrade Node (for example, using nvm):\n\n```bash\n# Install nvm (if not present)\n# https://github.com/nvm-sh/nvm#installing-and-updating\n\n# Use latest LTS\nnvm install --lts\nnvm use --lts\n```","readmeFilename":"README.md"}