Skip to content

Commit f31354f

Browse files
committed
feat: Make Logger obey log level settings
Closes #679
1 parent fccb69f commit f31354f

File tree

8 files changed

+48
-16
lines changed

8 files changed

+48
-16
lines changed

packages/kernel-browser-runtime/test/build-tests.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { runTests } from '@ocap/repo-tools/build-utils/test';
22
import path from 'node:path';
33

4-
// eslint-disable-next-line n/no-unsupported-features/node-builtins
54
const outDir = path.resolve(import.meta.dirname, '../dist/static');
65

76
const untransformedFiles = [

packages/kernel-browser-runtime/vite.config.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ const staticCopyTargets: readonly (string | Target)[] = [
2929
'../../kernel-shims/dist/endoify.js',
3030
];
3131

32-
// We will only run this where it's available, but ESLint doesn't know that
33-
// eslint-disable-next-line n/no-unsupported-features/node-builtins
3432
const sourceDir = path.resolve(import.meta.dirname, 'src');
3533
const buildDir = path.resolve(sourceDir, '../dist/static');
3634

packages/logger/src/constants.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,8 @@
1-
export const logLevels = ['debug', 'info', 'log', 'warn', 'error'] as const;
1+
export const logLevels = {
2+
debug: 1,
3+
info: 2,
4+
log: 3,
5+
warn: 4,
6+
error: 5,
7+
} as const;
28
export const TOKEN_UNDEFINED = 'e790f877-6987-4b06-9ce2-5fc889d5b9ac';

packages/logger/src/logger.test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { DuplexStream } from '@metamask/streams';
22
import { delay } from '@ocap/repo-tools/test-utils';
33
import { describe, it, expect, vi } from 'vitest';
44

5+
import { logLevels } from './constants.ts';
56
import { Logger } from './logger.ts';
67
import { lser } from './stream.ts';
78
import type { LogMessage } from './stream.ts';
@@ -113,6 +114,25 @@ describe('Logger', () => {
113114
});
114115
});
115116

117+
describe('logging level limits output', () => {
118+
consoleMethod.forEach((level) => {
119+
it(`logging at level ${level}`, () => {
120+
const testLogger = new Logger({ level });
121+
consoleMethod.forEach((method) => {
122+
const consoleSpy = vi.spyOn(console, method);
123+
testLogger[method](`foo ${method}`);
124+
if (logLevels[level] <= logLevels[method]) {
125+
// eslint-disable-next-line vitest/no-conditional-expect
126+
expect(consoleSpy).toHaveBeenCalledWith(`foo ${method}`);
127+
} else {
128+
// eslint-disable-next-line vitest/no-conditional-expect
129+
expect(consoleSpy).not.toHaveBeenCalled();
130+
}
131+
});
132+
});
133+
});
134+
});
135+
116136
describe('injectStream', () => {
117137
it('calls drain on the provided stream', () => {
118138
const logger = new Logger();

packages/logger/src/logger.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050

5151
import type { DuplexStream } from '@metamask/streams';
5252

53+
import { logLevels } from './constants.ts';
5354
import { parseOptions, mergeOptions } from './options.ts';
5455
import { lunser } from './stream.ts';
5556
import type { LogMessage } from './stream.ts';
@@ -99,16 +100,24 @@ export class Logger {
99100

100101
// Create aliases for the log methods, allowing them to be used in a
101102
// manner similar to the console object.
102-
const bind = (level: LogLevel): LogMethod =>
103-
harden(
104-
this.#dispatch.bind(this, {
105-
...this.#options,
106-
level,
107-
}),
108-
) as LogMethod;
109-
this.log = bind('log');
103+
const baseLevelIdx = this.#options.level
104+
? logLevels[this.#options.level]
105+
: 0;
106+
const bind = (level: LogLevel): LogMethod => {
107+
if (baseLevelIdx <= logLevels[level]) {
108+
return harden(
109+
this.#dispatch.bind(this, {
110+
...this.#options,
111+
level,
112+
}),
113+
) as LogMethod;
114+
}
115+
// eslint-disable-next-line no-empty-function
116+
return harden(() => {}) as LogMethod;
117+
};
110118
this.debug = bind('debug');
111119
this.info = bind('info');
120+
this.log = bind('log');
112121
this.warn = bind('warn');
113122
this.error = bind('error');
114123
}

packages/logger/src/transports.test.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,10 @@ const makeLogEntry = (level: LogLevel): LogEntry => ({
1717
});
1818

1919
describe('consoleTransport', () => {
20-
it.each(logLevels)(
20+
it.each(Object.keys(logLevels))(
2121
'logs to the appropriate console alias: %s',
22-
(level: LogLevel) => {
22+
(levelString: string) => {
23+
const level = levelString as LogLevel;
2324
const logEntry = makeLogEntry(level);
2425
const consoleMethodSpy = vi.spyOn(console, level);
2526
consoleTransport(logEntry);

packages/logger/src/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import type { logLevels } from './constants.ts';
33
/**
44
* The log level for the logger.
55
*/
6-
export type LogLevel = (typeof logLevels)[number];
6+
export type LogLevel = keyof typeof logLevels;
77

88
/**
99
* The log entry for the logger.

packages/omnium-gatherum/test/build/build-tests.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { runTests } from '@ocap/repo-tools/build-utils/test';
22
import path from 'node:path';
33

4-
// eslint-disable-next-line n/no-unsupported-features/node-builtins
54
const packageDir = path.resolve(import.meta.dirname, '../../');
65
const outDir = path.resolve(packageDir, 'dist');
76
const untransformedFiles = [

0 commit comments

Comments
 (0)