Skip to content

Commit 34d8d5e

Browse files
authored
feat: expose more logger config options (#29)
* feat: add 'bufferSize' + 'sendIntervalMs' + 'timeout' options * feat: pass more logger options (otel pkg) * docs: add changeset
1 parent e7663d9 commit 34d8d5e

File tree

7 files changed

+84
-16
lines changed

7 files changed

+84
-16
lines changed

.changeset/violet-rice-sing.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
---
2+
'@hyperdx/node-opentelemetry': patch
3+
'@hyperdx/node-logger': patch
4+
---
5+
6+
feat: expose 'bufferSize', 'sendIntervalMs' and 'timeout' logger options

packages/node-logger/README.md

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,14 @@ const logger = winston.createLogger({
5151
export default logger;
5252
```
5353

54+
#### Options
55+
56+
- **apiKey** - Required. Your HyperDX ingestion API key.
57+
- **service** - The name of the service.
58+
- **sendIntervalMs** - Time in milliseconds to wait between retry attempts. Default: `2000` (2 sec)
59+
- **bufferSize** - The maximum number of messages the logger will accumulate before sending them all as a bulk. Default: `100`.
60+
- **timeout** - The read/write/connection timeout in milliseconds. Default: `30000`.
61+
5462
### Pino Transport
5563

5664
Create a new HyperDX Pino Transport and append it to your list of transports. Example:
@@ -77,6 +85,14 @@ const logger = pino(
7785
export default logger;
7886
```
7987

88+
#### Options
89+
90+
- **apiKey** - Required. Your HyperDX ingestion API key.
91+
- **service** - The name of the service.
92+
- **sendIntervalMs** - Time in milliseconds to wait between retry attempts. Default: `2000` (2 sec)
93+
- **bufferSize** - The maximum number of messages the logger will accumulate before sending them all as a bulk. Default: `100`.
94+
- **timeout** - The read/write/connection timeout in milliseconds. Default: `30000`.
95+
8096
### NestJS Custom Logger
8197

8298
(powered by [nest-winston](https://www.npmjs.com/package/nest-winston?activeTab=readme))

packages/node-logger/src/_logger/index.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class HyperdxLogger {
5151
token,
5252
host = 'in.hyperdx.io',
5353
type = 'nodejs',
54-
sendIntervalMs = 10 * 1000,
54+
sendIntervalMs = 2 * 1000,
5555
bufferSize = 100,
5656
numberOfRetries = 3,
5757
supressErrors = false,
@@ -150,6 +150,7 @@ class HyperdxLogger {
150150
}
151151

152152
_timerSend() {
153+
this._debug('Timer fired. Trying to wake up and send messages...');
153154
if (this.messages.length > 0) {
154155
this._debug(
155156
`Woke up and saw ${this.messages.length} messages to send. Sending now...`,

packages/node-logger/src/logger.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,15 @@ export const parseWinstonLog = (log: {
6060

6161
const DEFAULT_TIMEOUT = 30000;
6262

63+
export type LoggerOptions = {
64+
apiKey: string;
65+
baseUrl?: string;
66+
bufferSize?: number;
67+
sendIntervalMs?: number;
68+
service?: string;
69+
timeout?: number; // The read/write/connection timeout in milliseconds
70+
};
71+
6372
export class Logger {
6473
private readonly service: string;
6574

@@ -68,11 +77,17 @@ export class Logger {
6877
constructor({
6978
apiKey,
7079
baseUrl,
80+
bufferSize,
81+
sendIntervalMs,
7182
service,
83+
timeout,
7284
}: {
7385
apiKey: string;
7486
baseUrl?: string;
87+
bufferSize?: number;
88+
sendIntervalMs?: number;
7589
service?: string;
90+
timeout?: number;
7691
}) {
7792
if (!apiKey) {
7893
console.error(`${LOG_PREFIX} API key not found`);
@@ -96,10 +111,12 @@ export class Logger {
96111

97112
this.client = apiKey
98113
? createLogger({
114+
bufferSize,
99115
host,
100116
port,
101117
protocol,
102-
timeout: DEFAULT_TIMEOUT,
118+
sendIntervalMs,
119+
timeout: timeout ?? DEFAULT_TIMEOUT,
103120
token: apiKey,
104121
})
105122
: null;

packages/node-logger/src/pino.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ import build from 'pino-abstract-transport';
33
import hdx from './debug';
44
import { Logger, parsePinoLog } from './logger';
55

6+
import type { LoggerOptions } from './logger';
7+
68
// map pino level to text
79
const PINO_LEVELS = {
810
10: 'trace',
@@ -13,11 +15,9 @@ const PINO_LEVELS = {
1315
60: 'fatal',
1416
};
1517

16-
export default (opts: {
17-
apiKey: string;
18-
baseUrl?: string;
19-
service?: string;
20-
}) => {
18+
export type HyperDXPinoOptions = LoggerOptions;
19+
20+
export default (opts: HyperDXPinoOptions) => {
2121
try {
2222
hdx('Initializing HyperDX pino transport...');
2323
const logger = new Logger(opts);

packages/node-logger/src/winston.ts

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,34 @@ import Transport from 'winston-transport';
33
import hdx from './debug';
44
import { Logger, parseWinstonLog } from './logger';
55

6+
import type { LoggerOptions } from './logger';
7+
8+
export type HyperDXWinstonOptions = LoggerOptions & {
9+
maxLevel?: string;
10+
};
11+
612
export default class HyperDXWinston extends Transport {
713
private readonly logger: Logger;
814

915
constructor({
1016
apiKey,
1117
baseUrl,
18+
bufferSize,
1219
maxLevel,
20+
sendIntervalMs,
1321
service,
14-
}: {
15-
apiKey: string;
16-
baseUrl?: string;
17-
maxLevel?: string;
18-
service?: string;
19-
}) {
22+
timeout,
23+
}: HyperDXWinstonOptions) {
2024
hdx('Initializing HyperDX winston transport...');
2125
super({ level: maxLevel ?? 'info' });
22-
this.logger = new Logger({ apiKey, baseUrl, service });
26+
this.logger = new Logger({
27+
apiKey,
28+
baseUrl,
29+
bufferSize,
30+
sendIntervalMs,
31+
service,
32+
timeout,
33+
});
2334
hdx(`HyperDX winston transport initialized!`);
2435
}
2536

packages/node-opentelemetry/src/logger.ts

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,37 @@ const HYPERDX_API_KEY = (env.HYPERDX_API_KEY ??
1010

1111
const SERVICE_NAME = env.OTEL_SERVICE_NAME as string;
1212

13-
export const getWinsonTransport = (maxLevel = 'info') => {
13+
type WinstonTransportOptions = {
14+
baseUrl?: string;
15+
bufferSize?: number;
16+
sendIntervalMs?: number;
17+
timeout?: number; // The read/write/connection timeout in milliseconds
18+
};
19+
20+
type PinotTransportOptions = WinstonTransportOptions;
21+
22+
export const getWinsonTransport = (
23+
maxLevel = 'info',
24+
options: WinstonTransportOptions = {},
25+
) => {
1426
hdx('Initializing winston transport');
1527
return new HyperDXWinston({
1628
apiKey: HYPERDX_API_KEY,
1729
maxLevel,
1830
service: SERVICE_NAME,
31+
...options,
1932
});
2033
};
2134

22-
export const getPinoTransport = (maxLevel = 'info') => ({
35+
export const getPinoTransport = (
36+
maxLevel = 'info',
37+
options: PinotTransportOptions = {},
38+
) => ({
2339
target: '@hyperdx/node-logger/build/src/pino',
2440
options: {
2541
apiKey: HYPERDX_API_KEY,
2642
service: SERVICE_NAME,
43+
...options,
2744
},
2845
level: maxLevel,
2946
});

0 commit comments

Comments
 (0)