Skip to content

Commit ce8a938

Browse files
committed
ci: add pino logger to hello-node-express-ts project
1 parent 1385a7f commit ce8a938

File tree

7 files changed

+166
-7
lines changed

7 files changed

+166
-7
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"env": {
3+
"browser": false,
4+
"es6": true,
5+
"node": true
6+
},
7+
"parser": "@typescript-eslint/parser",
8+
"parserOptions": {
9+
"project": "tsconfig.json",
10+
"sourceType": "module",
11+
"ecmaVersion": 2020
12+
},
13+
"plugins": ["@typescript-eslint", "prettier"],
14+
"extends": [
15+
"eslint:recommended",
16+
"plugin:@typescript-eslint/recommended",
17+
"plugin:prettier/recommended"
18+
],
19+
"rules": {
20+
"@typescript-eslint/ban-ts-comment": "warn",
21+
"@typescript-eslint/explicit-function-return-type": "warn",
22+
"@typescript-eslint/no-this-alias": "warn",
23+
"prettier/prettier": "error"
24+
}
25+
}

examples/hello-node-express-ts/index.ts

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,24 @@ import {
1111
ValueType,
1212
} from '@opentelemetry/api';
1313
import express, { Express, NextFunction, Request, Response } from 'express';
14+
import pino from 'pino';
15+
import * as HyperDX from '@hyperdx/node-opentelemetry';
16+
17+
const pinoLogger = pino({
18+
mixin: HyperDX.getPinoMixinFunction,
19+
transport: {
20+
targets: [
21+
HyperDX.getPinoTransport('info', {
22+
// Send logs info and above
23+
detectResources: true,
24+
}),
25+
{
26+
target: 'pino-pretty',
27+
level: 'debug',
28+
},
29+
],
30+
},
31+
});
1432

1533
const app: Express = express();
1634
const hostname = '0.0.0.0';
@@ -67,6 +85,37 @@ app.get('/', async (_req: Request, res: Response, next: NextFunction) => {
6785
}
6886
});
6987

88+
app.get('/logs', (_req: Request, res: Response) => {
89+
// Log with different levels
90+
pinoLogger.trace('This is a trace log - lowest level');
91+
pinoLogger.debug({ debugInfo: 'some debug data' }, 'This is a debug log');
92+
pinoLogger.info({ userId: 123, action: 'test' }, 'This is an info log');
93+
pinoLogger.warn(
94+
{ warning: 'something might be wrong' },
95+
'This is a warning log',
96+
);
97+
pinoLogger.error({ error: 'something went wrong' }, 'This is an error log');
98+
pinoLogger.fatal({ critical: 'system failure' }, 'This is a fatal log');
99+
100+
// Log with nested objects
101+
pinoLogger.info(
102+
{
103+
request: {
104+
method: 'GET',
105+
path: '/logs',
106+
headers: { 'user-agent': 'test' },
107+
},
108+
performance: {
109+
duration: 123,
110+
memory: process.memoryUsage(),
111+
},
112+
},
113+
'Complex log with nested data',
114+
);
115+
116+
res.status(200).json({ message: 'Logs generated successfully' });
117+
});
118+
70119
function sleepy(): Promise<void> {
71120
return new Promise((resolve) => {
72121
setTimeout(() => {

examples/hello-node-express-ts/instrumentation.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
import { initSDK } from '@hyperdx/node-opentelemetry';
1+
import * as HyperDX from '@hyperdx/node-opentelemetry';
22

3-
initSDK({
3+
HyperDX.init({
44
// advancedNetworkCapture: true,
55
// betaMode: true,
66
// consoleCapture: true,

examples/hello-node-express-ts/package.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
"dependencies": {
1515
"@opentelemetry/api": "^1.7.0",
1616
"@opentelemetry/resources": "^1.17.1",
17-
"express": "^4.19.2"
17+
"express": "^4.19.2",
18+
"pino": "^10.0.0",
19+
"pino-pretty": "^13.0.0"
1820
},
1921
"devDependencies": {
2022
"@types/express": "^4.17.21",

examples/hello-node-express-ts/yarn.lock

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,11 @@ [email protected]:
184184
resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz"
185185
integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==
186186

187+
atomic-sleep@^1.0.0:
188+
version "1.0.0"
189+
resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b"
190+
integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==
191+
187192
188193
version "1.20.2"
189194
resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd"
@@ -500,6 +505,11 @@ object-inspect@^1.13.1:
500505
resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz"
501506
integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==
502507

508+
on-exit-leak-free@^2.1.0:
509+
version "2.1.2"
510+
resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8"
511+
integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==
512+
503513
504514
version "2.4.1"
505515
resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz"
@@ -517,6 +527,40 @@ [email protected]:
517527
resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz"
518528
integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==
519529

530+
pino-abstract-transport@^2.0.0:
531+
version "2.0.0"
532+
resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz#de241578406ac7b8a33ce0d77ae6e8a0b3b68a60"
533+
integrity sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==
534+
dependencies:
535+
split2 "^4.0.0"
536+
537+
pino-std-serializers@^7.0.0:
538+
version "7.0.0"
539+
resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz#7c625038b13718dbbd84ab446bd673dc52259e3b"
540+
integrity sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==
541+
542+
pino@^10.0.0:
543+
version "10.0.0"
544+
resolved "https://registry.yarnpkg.com/pino/-/pino-10.0.0.tgz#3d1a8abc7a700142edebf02a7b291834da199fbe"
545+
integrity sha512-eI9pKwWEix40kfvSzqEP6ldqOoBIN7dwD/o91TY5z8vQI12sAffpR/pOqAD1IVVwIVHDpHjkq0joBPdJD0rafA==
546+
dependencies:
547+
atomic-sleep "^1.0.0"
548+
on-exit-leak-free "^2.1.0"
549+
pino-abstract-transport "^2.0.0"
550+
pino-std-serializers "^7.0.0"
551+
process-warning "^5.0.0"
552+
quick-format-unescaped "^4.0.3"
553+
real-require "^0.2.0"
554+
safe-stable-stringify "^2.3.1"
555+
slow-redact "^0.3.0"
556+
sonic-boom "^4.0.1"
557+
thread-stream "^3.0.0"
558+
559+
process-warning@^5.0.0:
560+
version "5.0.0"
561+
resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-5.0.0.tgz#566e0bf79d1dff30a72d8bbbe9e8ecefe8d378d7"
562+
integrity sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==
563+
520564
proxy-addr@~2.0.7:
521565
version "2.0.7"
522566
resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz"
@@ -532,6 +576,11 @@ [email protected]:
532576
dependencies:
533577
side-channel "^1.0.4"
534578

579+
quick-format-unescaped@^4.0.3:
580+
version "4.0.4"
581+
resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7"
582+
integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==
583+
535584
range-parser@~1.2.1:
536585
version "1.2.1"
537586
resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz"
@@ -547,11 +596,21 @@ [email protected]:
547596
iconv-lite "0.4.24"
548597
unpipe "1.0.0"
549598

599+
real-require@^0.2.0:
600+
version "0.2.0"
601+
resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78"
602+
integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==
603+
550604
551605
version "5.2.1"
552606
resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
553607
integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
554608

609+
safe-stable-stringify@^2.3.1:
610+
version "2.5.0"
611+
resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd"
612+
integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==
613+
555614
"safer-buffer@>= 2.1.2 < 3":
556615
version "2.1.2"
557616
resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
@@ -613,11 +672,35 @@ side-channel@^1.0.4:
613672
get-intrinsic "^1.2.4"
614673
object-inspect "^1.13.1"
615674

675+
slow-redact@^0.3.0:
676+
version "0.3.2"
677+
resolved "https://registry.yarnpkg.com/slow-redact/-/slow-redact-0.3.2.tgz#d06e25195aa5c492d32631c53d9ae86043b8b0e2"
678+
integrity sha512-MseHyi2+E/hBRqdOi5COy6wZ7j7DxXRz9NkseavNYSvvWC06D8a5cidVZX3tcG5eCW3NIyVU4zT63hw0Q486jw==
679+
680+
sonic-boom@^4.0.1:
681+
version "4.2.0"
682+
resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-4.2.0.tgz#e59a525f831210fa4ef1896428338641ac1c124d"
683+
integrity sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==
684+
dependencies:
685+
atomic-sleep "^1.0.0"
686+
687+
split2@^4.0.0:
688+
version "4.2.0"
689+
resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4"
690+
integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==
691+
616692
617693
version "2.0.1"
618694
resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz"
619695
integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
620696

697+
thread-stream@^3.0.0:
698+
version "3.1.0"
699+
resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-3.1.0.tgz#4b2ef252a7c215064507d4ef70c05a5e2d34c4f1"
700+
integrity sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==
701+
dependencies:
702+
real-require "^0.2.0"
703+
621704
622705
version "1.0.1"
623706
resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz"

examples/hello-node-express/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1-
const { initSDK } = require('@hyperdx/node-opentelemetry');
1+
const HyperDX = require('@hyperdx/node-opentelemetry');
22
const { context, metrics, propagation, trace } = require('@opentelemetry/api');
33

4-
initSDK({
4+
HyperDX.init({
55
// advancedNetworkCapture: true,
66
// betaMode: true,
77
// consoleCapture: true,

examples/hello-node/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
const { initSDK } = require('@hyperdx/node-opentelemetry');
1+
const HyperDX = require('@hyperdx/node-opentelemetry');
22
const { trace } = require('@opentelemetry/api');
33

44
// uses HYPERDX_API_KEY and OTEL_SERVICE_NAME environment variables
55
// enable debug output with env var DEBUG=true
6-
initSDK({
6+
HyperDX.init({
77
// advancedNetworkCapture: true,
88
// betaMode: true,
99
// consoleCapture: true,

0 commit comments

Comments
 (0)