Skip to content

Commit fd547c8

Browse files
authored
refactor(auto-instrumentations-node): migrate away from getEnv() (open-telemetry#2708)
1 parent 8c56f8d commit fd547c8

File tree

3 files changed

+69
-7
lines changed

3 files changed

+69
-7
lines changed

metapackages/auto-instrumentations-node/src/register.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,12 @@
1616
import * as opentelemetry from '@opentelemetry/sdk-node';
1717
import { diag, DiagConsoleLogger } from '@opentelemetry/api';
1818
import {
19+
getLogLevelFromEnv,
1920
getNodeAutoInstrumentations,
2021
getResourceDetectorsFromEnv,
2122
} from './utils';
2223

23-
diag.setLogger(
24-
new DiagConsoleLogger(),
25-
opentelemetry.core.getEnv().OTEL_LOG_LEVEL
26-
);
24+
diag.setLogger(new DiagConsoleLogger(), getLogLevelFromEnv());
2725

2826
const sdk = new opentelemetry.NodeSDK({
2927
instrumentations: getNodeAutoInstrumentations(),

metapackages/auto-instrumentations-node/src/utils.ts

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { diag } from '@opentelemetry/api';
17+
import { diag, DiagLogLevel } from '@opentelemetry/api';
1818
import { Instrumentation } from '@opentelemetry/instrumentation';
1919

2020
import { AmqplibInstrumentation } from '@opentelemetry/instrumentation-amqplib';
@@ -136,6 +136,17 @@ const InstrumentationMap = {
136136
'@opentelemetry/instrumentation-winston': WinstonInstrumentation,
137137
};
138138

139+
// The support string -> DiagLogLevel mappings
140+
const logLevelMap: { [key: string]: DiagLogLevel } = {
141+
ALL: DiagLogLevel.ALL,
142+
VERBOSE: DiagLogLevel.VERBOSE,
143+
DEBUG: DiagLogLevel.DEBUG,
144+
INFO: DiagLogLevel.INFO,
145+
WARN: DiagLogLevel.WARN,
146+
ERROR: DiagLogLevel.ERROR,
147+
NONE: DiagLogLevel.NONE,
148+
};
149+
139150
const defaultExcludedInstrumentations = [
140151
'@opentelemetry/instrumentation-fs',
141152
'@opentelemetry/instrumentation-fastify',
@@ -293,3 +304,16 @@ export function getResourceDetectorsFromEnv(): Array<Detector | DetectorSync> {
293304
return resourceDetector || [];
294305
});
295306
}
307+
308+
export function getLogLevelFromEnv(): DiagLogLevel {
309+
const rawLogLevel = process.env.OTEL_LOG_LEVEL;
310+
311+
// NOTE: as per specification we should actually only register if something is set, but our previous implementation
312+
// always registered a logger, even when nothing was set. Falling back to 'INFO' here to keep the same behavior as
313+
// with previous implementations.
314+
// Also: no point in warning - no logger is registered yet
315+
return (
316+
logLevelMap[rawLogLevel?.trim().toUpperCase() ?? 'INFO'] ??
317+
DiagLogLevel.INFO
318+
);
319+
}

metapackages/auto-instrumentations-node/test/utils.test.ts

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,12 @@
1414
* limitations under the License.
1515
*/
1616

17-
import { diag } from '@opentelemetry/api';
17+
import { diag, DiagLogLevel } from '@opentelemetry/api';
1818
import { HttpInstrumentationConfig } from '@opentelemetry/instrumentation-http';
1919
import * as assert from 'assert';
2020
import * as sinon from 'sinon';
2121
import { getNodeAutoInstrumentations } from '../src';
22-
import { getResourceDetectorsFromEnv } from '../src/utils';
22+
import { getLogLevelFromEnv, getResourceDetectorsFromEnv } from '../src/utils';
2323

2424
describe('utils', () => {
2525
describe('getNodeAutoInstrumentations', () => {
@@ -223,4 +223,44 @@ describe('utils', () => {
223223
delete process.env.OTEL_NODE_RESOURCE_DETECTORS;
224224
});
225225
});
226+
227+
describe('getLogLevelFromEnv', function () {
228+
afterEach(function () {
229+
delete process.env.OTEL_LOG_LEVEL;
230+
});
231+
232+
it('should select log level based on env var', function () {
233+
process.env.OTEL_LOG_LEVEL = 'NONE';
234+
assert.strictEqual(getLogLevelFromEnv(), DiagLogLevel.NONE);
235+
process.env.OTEL_LOG_LEVEL = 'VERBOSE';
236+
assert.strictEqual(getLogLevelFromEnv(), DiagLogLevel.VERBOSE);
237+
process.env.OTEL_LOG_LEVEL = 'DEBUG';
238+
assert.strictEqual(getLogLevelFromEnv(), DiagLogLevel.DEBUG);
239+
process.env.OTEL_LOG_LEVEL = 'INFO';
240+
assert.strictEqual(getLogLevelFromEnv(), DiagLogLevel.INFO);
241+
process.env.OTEL_LOG_LEVEL = 'WARN';
242+
assert.strictEqual(getLogLevelFromEnv(), DiagLogLevel.WARN);
243+
process.env.OTEL_LOG_LEVEL = 'ERROR';
244+
assert.strictEqual(getLogLevelFromEnv(), DiagLogLevel.ERROR);
245+
process.env.OTEL_LOG_LEVEL = 'ALL';
246+
assert.strictEqual(getLogLevelFromEnv(), DiagLogLevel.ALL);
247+
});
248+
249+
it('should ignore casing', function () {
250+
process.env.OTEL_LOG_LEVEL = 'warn';
251+
assert.strictEqual(getLogLevelFromEnv(), DiagLogLevel.WARN);
252+
process.env.OTEL_LOG_LEVEL = 'WaRN';
253+
assert.strictEqual(getLogLevelFromEnv(), DiagLogLevel.WARN);
254+
});
255+
256+
it('should fall back to INFO on bogus input', function () {
257+
process.env.OTEL_LOG_LEVEL = 'bogus';
258+
assert.strictEqual(getLogLevelFromEnv(), DiagLogLevel.INFO);
259+
});
260+
261+
it('should use INFO when unset', function () {
262+
delete process.env.OTEL_LOG_LEVEL;
263+
assert.strictEqual(getLogLevelFromEnv(), DiagLogLevel.INFO);
264+
});
265+
});
226266
});

0 commit comments

Comments
 (0)