fix(matrix): restore SDK root logger state

This commit is contained in:
Gustavo Madeira Santana
2026-04-25 16:11:56 -04:00
parent 5ee1c086db
commit cd0b954d52
2 changed files with 48 additions and 7 deletions

View File

@@ -2,7 +2,37 @@ import { logger as matrixJsSdkRootLogger } from "matrix-js-sdk/lib/logger.js";
import { describe, expect, it, vi } from "vitest";
import { ensureMatrixSdkLoggingConfigured, setMatrixSdkLogMode } from "./logging.js";
type MatrixJsSdkTestLogger = typeof matrixJsSdkRootLogger & {
getLevel?: () => number | string;
levels: { WARN: number };
methodFactory?: unknown;
rebuild?: () => void;
setLevel?: (level: number | string, persist?: boolean) => void;
};
describe("Matrix SDK logging", () => {
it("restores the Matrix JS SDK global logger level after quiet mode", () => {
const logger = matrixJsSdkRootLogger as MatrixJsSdkTestLogger;
const originalLevel = logger.getLevel?.();
const originalMethodFactory = logger.methodFactory;
try {
logger.setLevel?.("warn", false);
ensureMatrixSdkLoggingConfigured();
setMatrixSdkLogMode("quiet");
setMatrixSdkLogMode("default");
expect(logger.getLevel?.()).toBe(logger.levels.WARN);
expect(logger.methodFactory).toBe(originalMethodFactory);
} finally {
if (typeof originalLevel === "string" || typeof originalLevel === "number") {
logger.setLevel?.(originalLevel, false);
}
logger.methodFactory = originalMethodFactory;
logger.rebuild?.();
setMatrixSdkLogMode("default");
}
});
it("quiets the Matrix JS SDK global logger for JSON-safe CLI commands", () => {
const debugSpy = vi.spyOn(console, "debug").mockImplementation(() => undefined);
try {

View File

@@ -4,9 +4,7 @@ import { ConsoleLogger, LogService, setMatrixConsoleLogging } from "../sdk/logge
let matrixSdkLoggingConfigured = false;
let matrixSdkLogMode: "default" | "quiet" = "default";
const matrixSdkBaseLogger = new ConsoleLogger();
const matrixJsSdkRootLogMethodFactory = (
matrixJsSdkRootLogger as unknown as MatrixJsSdkLoglevelLogger
).methodFactory;
let matrixJsSdkRootLoggerSnapshot: MatrixJsSdkRootLoggerSnapshot | null = null;
type MatrixJsSdkLogger = {
trace: (...messageOrObject: unknown[]) => void;
@@ -18,9 +16,15 @@ type MatrixJsSdkLogger = {
};
type MatrixJsSdkLoglevelLogger = {
getLevel?: () => number | string;
methodFactory?: unknown;
rebuild?: () => void;
setLevel?: (level: string, persist?: boolean) => void;
setLevel?: (level: number | string, persist?: boolean) => void;
};
type MatrixJsSdkRootLoggerSnapshot = {
level?: number | string;
methodFactory?: unknown;
};
function shouldSuppressMatrixHttpNotFound(module: string, messageOrObject: unknown[]): boolean {
@@ -88,14 +92,21 @@ function applyMatrixSdkLogger(): void {
function setMatrixJsSdkRootLoggerLevel(level: "debug" | "silent"): void {
const logger = matrixJsSdkRootLogger as unknown as MatrixJsSdkLoglevelLogger;
matrixJsSdkRootLoggerSnapshot ??= {
level: logger.getLevel?.(),
methodFactory: logger.methodFactory,
};
if (level === "silent") {
logger.methodFactory = () => () => undefined;
logger.setLevel?.("debug", false);
logger.setLevel?.("silent", false);
logger.rebuild?.();
return;
}
logger.methodFactory = matrixJsSdkRootLogMethodFactory;
logger.setLevel?.("debug", false);
logger.methodFactory = matrixJsSdkRootLoggerSnapshot.methodFactory;
const previousLevel = matrixJsSdkRootLoggerSnapshot.level;
if (typeof previousLevel === "string" || typeof previousLevel === "number") {
logger.setLevel?.(previousLevel, false);
}
logger.rebuild?.();
}