Skip to content

Commit 48a79ef

Browse files
authored
Merge pull request #260 from WalletConnect/fix/logger-level-override
fix(logger): pass loggerOverride string as log level to chunk logger
2 parents e2cfb8f + 632cf5a commit 48a79ef

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)