Skip to content

Commit 632cf5a

Browse files
committed
fix(logger): pass loggerOverride string as log level to chunk logger
When users passed a string level like "error" via loggerOverride in generatePlatformLogger, it was not being passed through to the chunk logger. This caused all logs to be forwarded to console regardless of the configured level. The fix ensures that when loggerOverride is a string, it's used as the log level in the opts passed to generateClientLogger/generateServerLogger. Additionally, fixed generateServerLogger to use browser.write in addition to the destination stream. The bundled pino-browser ignores the destination argument, so browser.write is needed for the bundled version while the destination stream is needed for Node.js tests. - All logs are still captured in memory (pino level remains "trace") - Only logs at configured level or higher are forwarded to console - Added tests to verify loggerOverride string is respected Bump version to 3.0.2
1 parent e2cfb8f commit 632cf5a

4 files changed

Lines changed: 89 additions & 5 deletions

File tree

misc/logger/package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@walletconnect/logger",
33
"description": "Logger Utils",
4-
"version": "3.0.1",
4+
"version": "3.0.2",
55
"author": "WalletConnect, Inc. <walletconnect.com>",
66
"license": "MIT",
77
"homepage": "https://github.com/WalletConnect/walletconnect-utils/",
@@ -64,4 +64,4 @@
6464
"@walletconnect/safe-json": "^1.0.2",
6565
"pino": "10.0.0"
6666
}
67-
}
67+
}

misc/logger/src/utils.ts

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,15 @@ export function generateServerLogger(params: { maxSizeInBytes?: number; opts?: L
7676
chunkLoggerController: ServerChunkLogger;
7777
} {
7878
const serverLogger = new ServerChunkLogger(params.opts?.level, params.maxSizeInBytes);
79+
// Use both destination stream (for Node.js pino) and browser.write (for bundled pino-browser)
7980
const logger = pino(
8081
{
8182
...params.opts,
8283
level: "trace",
84+
browser: {
85+
...params.opts?.browser,
86+
write: (obj) => serverLogger.write(obj),
87+
},
8388
},
8489
serverLogger,
8590
);
@@ -102,9 +107,15 @@ export function generatePlatformLogger(params: {
102107
};
103108
}
104109

110+
// When loggerOverride is a string, use it as the log level
111+
const opts: LoggerOptions = {
112+
...params.opts,
113+
level: typeof params.loggerOverride === "string" ? params.loggerOverride : params.opts?.level,
114+
};
115+
105116
if (typeof window !== "undefined") {
106-
return generateClientLogger(params);
117+
return generateClientLogger({ ...params, opts });
107118
} else {
108-
return generateServerLogger(params);
119+
return generateServerLogger({ ...params, opts });
109120
}
110121
}

misc/logger/test/index.test.ts

Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import {
99
getDefaultLoggerOptions,
1010
generateChildLogger,
1111
generateServerLogger,
12+
generatePlatformLogger,
1213
} from "../src";
1314

1415
describe("Logger", () => {
@@ -252,5 +253,77 @@ describe("Logger", () => {
252253
chai.expect(logArray.filter((log) => log.includes(pString)).length).eq(1);
253254
});
254255
});
256+
257+
describe("Platform Logger", () => {
258+
let consoleTrace: sinon.SinonStub;
259+
let consoleDebug: sinon.SinonStub;
260+
let consoleLog: sinon.SinonStub;
261+
let consoleWarn: sinon.SinonStub;
262+
let consoleError: sinon.SinonStub;
263+
264+
beforeEach(() => {
265+
consoleTrace = sinon.stub(console, "trace");
266+
consoleDebug = sinon.stub(console, "debug");
267+
consoleLog = sinon.stub(console, "log");
268+
consoleWarn = sinon.stub(console, "warn");
269+
consoleError = sinon.stub(console, "error");
270+
});
271+
272+
afterEach(() => {
273+
consoleTrace.restore();
274+
consoleDebug.restore();
275+
consoleLog.restore();
276+
consoleWarn.restore();
277+
consoleError.restore();
278+
});
279+
280+
it("Respects loggerOverride string as log level for console output", () => {
281+
// Use "warn" level (NOT "error") to avoid coincidentally matching the default
282+
// The default level in BaseChunkLogger is "error", so using "error" here
283+
// would pass even if loggerOverride is not properly passed through
284+
const { logger, chunkLoggerController } = generatePlatformLogger({
285+
loggerOverride: "warn",
286+
});
287+
288+
logger.trace("trace message");
289+
logger.debug("debug message");
290+
logger.info("info message");
291+
logger.warn("warn message");
292+
logger.error("error message");
293+
294+
const logArray = chunkLoggerController!.getLogArray();
295+
296+
// All logs should be stored in memory
297+
chai.expect(logArray.length).eq(5);
298+
299+
// Only warn and error should be forwarded to console
300+
chai.expect(consoleTrace.called).eq(false);
301+
chai.expect(consoleDebug.called).eq(false);
302+
chai.expect(consoleLog.called).eq(false);
303+
chai.expect(consoleWarn.called).eq(true);
304+
chai.expect(consoleError.called).eq(true);
305+
});
306+
307+
it("Stores all logs in memory regardless of level", () => {
308+
const { logger, chunkLoggerController } = generatePlatformLogger({
309+
loggerOverride: "warn",
310+
});
311+
312+
logger.trace("trace");
313+
logger.debug("debug");
314+
logger.info("info");
315+
logger.warn("warn");
316+
logger.error("error");
317+
318+
const logArray = chunkLoggerController!.getLogArray();
319+
320+
// All 5 logs should be stored
321+
chai.expect(logArray.filter((log) => log.includes("trace")).length).eq(1);
322+
chai.expect(logArray.filter((log) => log.includes("debug")).length).eq(1);
323+
chai.expect(logArray.filter((log) => log.includes("info")).length).eq(1);
324+
chai.expect(logArray.filter((log) => log.includes("warn")).length).eq(1);
325+
chai.expect(logArray.filter((log) => log.includes("error")).length).eq(1);
326+
});
327+
});
255328
});
256329
});

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)