@dbos-inc/dbos-sdk 3.6.8-preview → 3.6.11-preview
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dbos-config.schema.json +0 -93
- package/dist/dbos-config.schema.json +0 -93
- package/dist/src/cli/docker_pg_helper.d.ts +0 -3
- package/dist/src/cli/docker_pg_helper.d.ts.map +1 -1
- package/dist/src/cli/docker_pg_helper.js +13 -29
- package/dist/src/cli/docker_pg_helper.js.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +0 -7
- package/dist/src/config.js.map +1 -1
- package/dist/src/telemetry/logs.d.ts +9 -5
- package/dist/src/telemetry/logs.d.ts.map +1 -1
- package/dist/src/telemetry/logs.js +120 -84
- package/dist/src/telemetry/logs.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -7
@@ -2,11 +2,7 @@
|
|
2
2
|
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
|
3
3
|
/* eslint-disable @typescript-eslint/no-unsafe-call */
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
5
|
-
exports.
|
6
|
-
/* eslint-disable @typescript-eslint/no-require-imports */
|
7
|
-
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
|
8
|
-
const winston_1 = require("winston");
|
9
|
-
const TransportStream = require("winston-transport");
|
5
|
+
exports.DBOSConsoleLogger = exports.DBOSContextualLogger = exports.GlobalLogger = void 0;
|
10
6
|
const utils_1 = require("../utils");
|
11
7
|
// As DBOS OTLP is optional, OTLP objects must only be dynamically imported
|
12
8
|
// and only when OTLP is enabled. Importing OTLP types is fine as long
|
@@ -44,33 +40,101 @@ class GlobalLogger {
|
|
44
40
|
logger;
|
45
41
|
addContextMetadata;
|
46
42
|
isLogging = false; // Prevent recursive logging
|
47
|
-
otlpTransport;
|
48
43
|
constructor(telemetryCollector, config) {
|
49
44
|
this.telemetryCollector = telemetryCollector;
|
45
|
+
this.addContextMetadata = config?.addContextMetadata || false;
|
46
|
+
if (!utils_1.globalParams.enableOTLP) {
|
47
|
+
this.logger = new DBOSConsoleLogger(config ?? {});
|
48
|
+
return;
|
49
|
+
}
|
50
|
+
const TransportStream = require('winston-transport');
|
51
|
+
class OTLPLogQueueTransport extends TransportStream {
|
52
|
+
telemetryCollector;
|
53
|
+
name = 'OTLPLogQueueTransport';
|
54
|
+
otelLogger;
|
55
|
+
applicationID;
|
56
|
+
executorID;
|
57
|
+
constructor(telemetryCollector, logLevel) {
|
58
|
+
super();
|
59
|
+
this.telemetryCollector = telemetryCollector;
|
60
|
+
this.level = logLevel;
|
61
|
+
// not sure if we need a more explicit name here
|
62
|
+
const { LoggerProvider } = require('@opentelemetry/sdk-logs');
|
63
|
+
const loggerProvider = new LoggerProvider();
|
64
|
+
this.otelLogger = loggerProvider.getLogger('default');
|
65
|
+
this.applicationID = utils_1.globalParams.appID;
|
66
|
+
this.executorID = utils_1.globalParams.executorID;
|
67
|
+
const logRecordProcessor = {
|
68
|
+
forceFlush: async () => {
|
69
|
+
// no-op
|
70
|
+
},
|
71
|
+
onEmit(logRecord) {
|
72
|
+
telemetryCollector.push(logRecord);
|
73
|
+
},
|
74
|
+
shutdown: async () => {
|
75
|
+
// no-op
|
76
|
+
},
|
77
|
+
};
|
78
|
+
loggerProvider.addLogRecordProcessor(logRecordProcessor);
|
79
|
+
}
|
80
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
81
|
+
log(info, callback) {
|
82
|
+
const { level, message, stack, span } = info;
|
83
|
+
const levelToSeverityNumber = {
|
84
|
+
error: SeverityNumber.ERROR,
|
85
|
+
warn: SeverityNumber.WARN,
|
86
|
+
info: SeverityNumber.INFO,
|
87
|
+
debug: SeverityNumber.DEBUG,
|
88
|
+
};
|
89
|
+
// Ideally we want to give the spanContext to the logRecord,
|
90
|
+
// But there seems to some dependency bugs in opentelemetry-js
|
91
|
+
// (span.getValue(SPAN_KEY) undefined when we pass the context, as commented bellow)
|
92
|
+
// So for now we get the traceId and spanId directly from the context and pass them through the logRecord attributes
|
93
|
+
this.otelLogger.emit({
|
94
|
+
severityNumber: levelToSeverityNumber[level],
|
95
|
+
severityText: level,
|
96
|
+
body: message,
|
97
|
+
timestamp: performance.now(), // So far I don't see a major difference between this and observedTimestamp
|
98
|
+
observedTimestamp: performance.now(),
|
99
|
+
attributes: {
|
100
|
+
...span?.attributes,
|
101
|
+
traceId: span?.spanContext()?.traceId,
|
102
|
+
spanId: span?.spanContext()?.spanId,
|
103
|
+
stack,
|
104
|
+
applicationID: this.applicationID,
|
105
|
+
applicationVersion: utils_1.globalParams.appVersion,
|
106
|
+
executorID: this.executorID,
|
107
|
+
},
|
108
|
+
});
|
109
|
+
callback();
|
110
|
+
}
|
111
|
+
}
|
112
|
+
// Import Winston dependencies only when OTLP is enabled
|
113
|
+
const { transports, createLogger } = require('winston');
|
50
114
|
const winstonTransports = [];
|
51
|
-
winstonTransports.push(new
|
52
|
-
format:
|
115
|
+
winstonTransports.push(new transports.Console({
|
116
|
+
format: getConsoleFormat(),
|
53
117
|
level: config?.logLevel || 'info',
|
54
118
|
silent: config?.silent || false,
|
55
119
|
forceConsole: config?.forceConsole || false,
|
56
120
|
}));
|
121
|
+
let otlpTransport = undefined;
|
57
122
|
// Only enable the OTLP transport if we have a telemetry collector and an exporter
|
58
123
|
if (utils_1.globalParams.enableOTLP && this.telemetryCollector?.exporter) {
|
59
|
-
|
60
|
-
winstonTransports.push(
|
124
|
+
otlpTransport = new OTLPLogQueueTransport(this.telemetryCollector, config?.logLevel || 'info');
|
125
|
+
winstonTransports.push(otlpTransport);
|
61
126
|
}
|
62
|
-
this.logger =
|
63
|
-
this.addContextMetadata = config?.addContextMetadata || false;
|
127
|
+
this.logger = createLogger({ transports: winstonTransports });
|
64
128
|
if (utils_1.globalParams.enableOTLP && process.env.DBOS__CAPTURE_STD !== 'false' && this.telemetryCollector?.exporter) {
|
65
129
|
(0, utils_1.interceptStreams)((msg, stream) => {
|
66
130
|
if (stream === 'stdout') {
|
67
131
|
if (!this.isLogging) {
|
68
|
-
|
132
|
+
otlpTransport?.log({ level: 'info', message: msg.trim() }, () => { });
|
69
133
|
}
|
70
134
|
}
|
71
135
|
else {
|
72
136
|
if (!this.isLogging) {
|
73
|
-
|
137
|
+
otlpTransport?.log({ level: 'error', message: msg.trim(), stack: new Error().stack }, () => { });
|
74
138
|
}
|
75
139
|
}
|
76
140
|
});
|
@@ -165,78 +229,50 @@ class DBOSContextualLogger {
|
|
165
229
|
}
|
166
230
|
}
|
167
231
|
exports.DBOSContextualLogger = DBOSContextualLogger;
|
232
|
+
class DBOSConsoleLogger {
|
233
|
+
config;
|
234
|
+
constructor(config) {
|
235
|
+
this.config = config;
|
236
|
+
}
|
237
|
+
info(logEntry, _metadata) {
|
238
|
+
console.log(logEntry);
|
239
|
+
}
|
240
|
+
debug(logEntry, _metadata) {
|
241
|
+
if (this.config.logLevel === 'debug') {
|
242
|
+
console.debug(logEntry);
|
243
|
+
}
|
244
|
+
}
|
245
|
+
warn(logEntry, _metadata) {
|
246
|
+
console.warn(logEntry);
|
247
|
+
}
|
248
|
+
error(inputError, metadata) {
|
249
|
+
if (inputError instanceof Error) {
|
250
|
+
console.error(inputError);
|
251
|
+
}
|
252
|
+
else if (metadata?.stack) {
|
253
|
+
console.error(inputError, '\n', metadata.stack);
|
254
|
+
}
|
255
|
+
else {
|
256
|
+
console.error(inputError);
|
257
|
+
}
|
258
|
+
}
|
259
|
+
}
|
260
|
+
exports.DBOSConsoleLogger = DBOSConsoleLogger;
|
168
261
|
/***********************/
|
169
262
|
/* FORMAT & TRANSPORTS */
|
170
263
|
/***********************/
|
171
|
-
|
172
|
-
|
173
|
-
const
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
})
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
otelLogger;
|
185
|
-
applicationID;
|
186
|
-
executorID;
|
187
|
-
constructor(telemetryCollector, logLevel) {
|
188
|
-
super();
|
189
|
-
this.telemetryCollector = telemetryCollector;
|
190
|
-
this.level = logLevel;
|
191
|
-
// not sure if we need a more explicit name here
|
192
|
-
const { LoggerProvider } = require('@opentelemetry/sdk-logs');
|
193
|
-
const loggerProvider = new LoggerProvider();
|
194
|
-
this.otelLogger = loggerProvider.getLogger('default');
|
195
|
-
this.applicationID = utils_1.globalParams.appID;
|
196
|
-
this.executorID = utils_1.globalParams.executorID;
|
197
|
-
const logRecordProcessor = {
|
198
|
-
forceFlush: async () => {
|
199
|
-
// no-op
|
200
|
-
},
|
201
|
-
onEmit(logRecord) {
|
202
|
-
telemetryCollector.push(logRecord);
|
203
|
-
},
|
204
|
-
shutdown: async () => {
|
205
|
-
// no-op
|
206
|
-
},
|
207
|
-
};
|
208
|
-
loggerProvider.addLogRecordProcessor(logRecordProcessor);
|
209
|
-
}
|
210
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
211
|
-
log(info, callback) {
|
212
|
-
const { level, message, stack, span } = info;
|
213
|
-
const levelToSeverityNumber = {
|
214
|
-
error: SeverityNumber.ERROR,
|
215
|
-
warn: SeverityNumber.WARN,
|
216
|
-
info: SeverityNumber.INFO,
|
217
|
-
debug: SeverityNumber.DEBUG,
|
218
|
-
};
|
219
|
-
// Ideally we want to give the spanContext to the logRecord,
|
220
|
-
// But there seems to some dependency bugs in opentelemetry-js
|
221
|
-
// (span.getValue(SPAN_KEY) undefined when we pass the context, as commented bellow)
|
222
|
-
// So for now we get the traceId and spanId directly from the context and pass them through the logRecord attributes
|
223
|
-
this.otelLogger.emit({
|
224
|
-
severityNumber: levelToSeverityNumber[level],
|
225
|
-
severityText: level,
|
226
|
-
body: message,
|
227
|
-
timestamp: performance.now(), // So far I don't see a major difference between this and observedTimestamp
|
228
|
-
observedTimestamp: performance.now(),
|
229
|
-
attributes: {
|
230
|
-
...span?.attributes,
|
231
|
-
traceId: span?.spanContext()?.traceId,
|
232
|
-
spanId: span?.spanContext()?.spanId,
|
233
|
-
stack,
|
234
|
-
applicationID: this.applicationID,
|
235
|
-
applicationVersion: utils_1.globalParams.appVersion,
|
236
|
-
executorID: this.executorID,
|
237
|
-
},
|
238
|
-
});
|
239
|
-
callback();
|
240
|
-
}
|
264
|
+
// Lazily create the console format only when Winston is used
|
265
|
+
function getConsoleFormat() {
|
266
|
+
const { format } = require('winston');
|
267
|
+
return format.combine(format.errors({ stack: true }), format.timestamp(), format.colorize(), format.printf((info) => {
|
268
|
+
const { timestamp, level, message, stack } = info;
|
269
|
+
const applicationVersion = utils_1.globalParams.appVersion;
|
270
|
+
const ts = typeof timestamp === 'string' ? timestamp.slice(0, 19).replace('T', ' ') : undefined;
|
271
|
+
const formattedStack = typeof stack === 'string' ? stack?.split('\n').slice(1).join('\n') : undefined;
|
272
|
+
const messageString = typeof message === 'string' ? message : utils_1.DBOSJSON.stringify(message);
|
273
|
+
const fullMessageString = `${messageString}${info.includeContextMetadata ? ` ${utils_1.DBOSJSON.stringify(info.span?.attributes)}` : ''}`;
|
274
|
+
const versionString = applicationVersion ? ` [version ${applicationVersion}]` : '';
|
275
|
+
return `${ts}${versionString} [${level}]: ${fullMessageString} ${stack ? '\n' + formattedStack : ''}`;
|
276
|
+
}));
|
241
277
|
}
|
242
278
|
//# sourceMappingURL=logs.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/telemetry/logs.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,sDAAsD;;;
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../../src/telemetry/logs.ts"],"names":[],"mappings":"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"}
|