@opentelemetry/core
Version:
OpenTelemetry Core provides constants and utilities shared by all OpenTelemetry SDK packages.
41 lines (40 loc) • 1.17 kB
JavaScript
import { diag } from "@opentelemetry/api";
//#region src/common/logging-error-handler.ts
/**
* Returns a function that logs an error using the provided logger, or a
* console logger if one was not provided.
*/
function loggingErrorHandler() {
return (ex) => {
diag.error(stringifyException(ex));
};
}
/**
* Converts an exception into a string representation
* @param {Exception} ex
*/
function stringifyException(ex) {
if (typeof ex === "string") return ex;
else return JSON.stringify(flattenException(ex));
}
/**
* Flattens an exception into key-value pairs by traversing the prototype chain
* and coercing values to strings. Duplicate properties will not be overwritten;
* the first insert wins.
*/
function flattenException(ex) {
const result = {};
let current = ex;
while (current !== null) {
Object.getOwnPropertyNames(current).forEach((propertyName) => {
if (result[propertyName]) return;
const value = current[propertyName];
if (value) result[propertyName] = String(value);
});
current = Object.getPrototypeOf(current);
}
return result;
}
//#endregion
export { loggingErrorHandler };
//# sourceMappingURL=logging-error-handler.mjs.map