UNPKG

@sap/opentelemetry-exporter-for-sap-cloud-logging

Version:
48 lines 2.12 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MultiLogRecordExporter = void 0; const core_1 = require("@opentelemetry/core"); const api_1 = require("@opentelemetry/api"); class MultiLogRecordExporter { constructor(className = "MultiLogRecordExporter") { this.logRecordExporters = []; this.diagLogger = api_1.diag.createComponentLogger({ namespace: className }); } async forceFlush() { const results = await Promise.allSettled(this.logRecordExporters.map((exporter) => exporter.forceFlush())); const failures = results.filter((result) => result.status === "rejected"); if (failures.length > 0) { for (const failure of failures) { this.diagLogger.warn("Error returned by forceFlush.", failure.reason); } throw new Error(`forceFlush failed for ${failures.length} exporter(s).`); } } add(...exporters) { this.logRecordExporters.push(...exporters); } export(logs, resultCallback) { let promises = this.logRecordExporters.map((exporter) => new Promise((resolve) => exporter.export(logs, (result) => { if (result.code == core_1.ExportResultCode.FAILED && result.error) { this.diagLogger.warn("Error returned by the export.", result.error); } resolve(result); }))); Promise.all(promises).then((results) => resultCallback({ code: results.every(result => result.code == core_1.ExportResultCode.SUCCESS) ? core_1.ExportResultCode.SUCCESS : core_1.ExportResultCode.FAILED })); } shutdown() { let promises = this.logRecordExporters.map((exporter) => exporter.shutdown()); let overallPromise = new Promise((resolve, reject) => { Promise.all(promises).then(() => { resolve(); }).catch((reason) => { reject(reason); }); }); return overallPromise; } } exports.MultiLogRecordExporter = MultiLogRecordExporter; //# sourceMappingURL=multiLogExporter.js.map