UNPKG

2.02 kBJavaScriptView Raw
1"use strict";
2/*
3 * Copyright The OpenTelemetry Authors
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * https://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17Object.defineProperty(exports, "__esModule", { value: true });
18exports.loggingErrorHandler = void 0;
19const api_1 = require("@opentelemetry/api");
20/**
21 * Returns a function that logs an error using the provided logger, or a
22 * console logger if one was not provided.
23 */
24function loggingErrorHandler() {
25 return (ex) => {
26 api_1.diag.error(stringifyException(ex));
27 };
28}
29exports.loggingErrorHandler = loggingErrorHandler;
30/**
31 * Converts an exception into a string representation
32 * @param {Exception} ex
33 */
34function stringifyException(ex) {
35 if (typeof ex === 'string') {
36 return ex;
37 }
38 else {
39 return JSON.stringify(flattenException(ex));
40 }
41}
42/**
43 * Flattens an exception into key-value pairs by traversing the prototype chain
44 * and coercing values to strings. Duplicate properties will not be overwritten;
45 * the first insert wins.
46 */
47function flattenException(ex) {
48 const result = {};
49 let current = ex;
50 while (current !== null) {
51 Object.getOwnPropertyNames(current).forEach(propertyName => {
52 if (result[propertyName])
53 return;
54 const value = current[propertyName];
55 if (value) {
56 result[propertyName] = String(value);
57 }
58 });
59 current = Object.getPrototypeOf(current);
60 }
61 return result;
62}
63//# sourceMappingURL=logging-error-handler.js.map
\No newline at end of file