@opentelemetry/api
Version:
Public API for OpenTelemetry
1 lines • 4.89 kB
Source Map (JSON)
{"version":3,"file":"consoleLogger.cjs","names":[],"sources":["../../src/diag/consoleLogger.ts"],"sourcesContent":["/*\n * Copyright The OpenTelemetry Authors\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport type { DiagLogger, DiagLogFunction } from './types';\n\ntype ConsoleMapKeys = 'error' | 'warn' | 'info' | 'debug' | 'trace';\nconst consoleMap: { n: keyof DiagLogger; c: ConsoleMapKeys }[] = [\n { n: 'error', c: 'error' },\n { n: 'warn', c: 'warn' },\n { n: 'info', c: 'info' },\n { n: 'debug', c: 'debug' },\n { n: 'verbose', c: 'trace' },\n];\n\n// Save original console methods at module load time, before any instrumentation\n// can wrap them. This ensures DiagConsoleLogger calls the unwrapped originals.\n// Exported for testing only — not part of the public API.\nexport const _originalConsoleMethods: Partial<\n Record<ConsoleMapKeys | 'log', typeof console.log>\n> = {};\nif (typeof console !== 'undefined') {\n const keys: (ConsoleMapKeys | 'log')[] = [\n 'error',\n 'warn',\n 'info',\n 'debug',\n 'trace',\n 'log',\n ];\n for (const key of keys) {\n // eslint-disable-next-line no-console\n if (typeof console[key] === 'function') {\n // eslint-disable-next-line no-console\n _originalConsoleMethods[key] = console[key];\n }\n }\n}\n\n/**\n * A simple Immutable Console based diagnostic logger which will output any messages to the Console.\n * If you want to limit the amount of logging to a specific level or lower use the\n * {@link createLogLevelDiagLogger}\n *\n * @since 1.0.0\n */\nexport class DiagConsoleLogger implements DiagLogger {\n constructor() {\n function _consoleFunc(funcName: ConsoleMapKeys): DiagLogFunction {\n return function (...args) {\n // Prefer original (pre-instrumentation) methods saved at module load time.\n let theFunc = _originalConsoleMethods[funcName];\n // Some environments only expose the console when the F12 developer console is open\n if (typeof theFunc !== 'function') {\n theFunc = _originalConsoleMethods['log'];\n }\n // Fall back in case console was not available at module load time but became available later.\n if (typeof theFunc !== 'function' && console) {\n // eslint-disable-next-line no-console\n theFunc = console[funcName];\n if (typeof theFunc !== 'function') {\n // eslint-disable-next-line no-console\n theFunc = console.log;\n }\n }\n if (typeof theFunc === 'function') {\n return theFunc.apply(console, args);\n }\n };\n }\n\n for (let i = 0; i < consoleMap.length; i++) {\n this[consoleMap[i].n] = _consoleFunc(consoleMap[i].c);\n }\n }\n\n /** Log an error scenario that was not expected and caused the requested operation to fail. */\n public error!: DiagLogFunction;\n\n /**\n * Log a warning scenario to inform the developer of an issues that should be investigated.\n * The requested operation may or may not have succeeded or completed.\n */\n public warn!: DiagLogFunction;\n\n /**\n * Log a general informational message, this should not affect functionality.\n * This is also the default logging level so this should NOT be used for logging\n * debugging level information.\n */\n public info!: DiagLogFunction;\n\n /**\n * Log a general debug message that can be useful for identifying a failure.\n * Information logged at this level may include diagnostic details that would\n * help identify a failure scenario. Useful scenarios would be to log the execution\n * order of async operations\n */\n public debug!: DiagLogFunction;\n\n /**\n * Log a detailed (verbose) trace level logging that can be used to identify failures\n * where debug level logging would be insufficient, this level of tracing can include\n * input and output parameters and as such may include PII information passing through\n * the API. As such it is recommended that this level of tracing should not be enabled\n * in a production environment.\n */\n public verbose!: DiagLogFunction;\n}\n"],"mappings":";AAQA,MAAM,aAA2D;CAC/D;EAAE,GAAG;EAAS,GAAG;CAAQ;CACzB;EAAE,GAAG;EAAQ,GAAG;CAAO;CACvB;EAAE,GAAG;EAAQ,GAAG;CAAO;CACvB;EAAE,GAAG;EAAS,GAAG;CAAQ;CACzB;EAAE,GAAG;EAAW,GAAG;CAAQ;AAC7B;AAKA,MAAa,0BAET,CAAC;AACL,IAAI,OAAO,YAAY,aAShB;MAAA,MAAM,OAAO;EAPhB;EACA;EACA;EACA;EACA;EACA;CAEmB,GAEnB,IAAI,OAAO,QAAQ,SAAS,YAE1B,wBAAwB,OAAO,QAAQ;AAAA;;;;;;;;AAY7C,IAAa,oBAAb,MAAqD;CACnD,cAAc;EACZ,SAAS,aAAa,UAA2C;GAC/D,OAAO,SAAU,GAAG,MAAM;IAExB,IAAI,UAAU,wBAAwB;IAEtC,IAAI,OAAO,YAAY,YACrB,UAAU,wBAAwB;IAGpC,IAAI,OAAO,YAAY,cAAc,SAAS;KAE5C,UAAU,QAAQ;KAClB,IAAI,OAAO,YAAY,YAErB,UAAU,QAAQ;IAEtB;IACA,IAAI,OAAO,YAAY,YACrB,OAAO,QAAQ,MAAM,SAAS,IAAI;GAEtC;EACF;EAEA,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KACrC,KAAK,WAAW,EAAE,CAAC,KAAK,aAAa,WAAW,EAAE,CAAC,CAAC;CAExD;AAkCF"}