diff --git a/package.json b/package.json index c4d264e58e..9b094f4f39 100644 --- a/package.json +++ b/package.json @@ -56,7 +56,7 @@ "bs58": "^6.0.0", "content-type": "^1.0.4", "jwt-decode": "^4.0.0", - "loglevel": "^1.7.1", + "loglevel": "^1.9.2", "matrix-events-sdk": "0.0.1", "matrix-widget-api": "^1.10.0", "oidc-client-ts": "^3.0.1", diff --git a/src/logger.ts b/src/logger.ts index da381b47b7..a3ab9d3bd5 100644 --- a/src/logger.ts +++ b/src/logger.ts @@ -34,6 +34,11 @@ export interface Logger extends BaseLogger { /** * Create a child logger. * + * This child will use the `methodFactory` of the parent, so any log extensions applied to the parent + * at the time of calling `getChild` will be applied to the child as well. + * It will NOT apply changes to the parent's `methodFactory` after the child was created. + * Those changes need to be applied to the child manually. + * * @param namespace - name to add to the current logger to generate the child. Some implementations of `Logger` * use this as a prefix; others use a different mechanism. */ @@ -128,14 +133,24 @@ interface PrefixedLogger extends loglevel.Logger, LoggerWithLogMethod { * * @param prefix Prefix to add to each logged line. If undefined, no prefix will be added. */ -function getPrefixedLogger(prefix?: string): LoggerWithLogMethod { +function getPrefixedLogger(prefix?: string): PrefixedLogger { const loggerName = DEFAULT_NAMESPACE + (prefix === undefined ? "" : `-${prefix}`); const prefixLogger = loglevel.getLogger(loggerName) as PrefixedLogger; if (prefixLogger.getChild === undefined) { // This is a new loglevel Logger which has not been turned into a PrefixedLogger yet. prefixLogger.prefix = prefix; - prefixLogger.getChild = (childPrefix): Logger => getPrefixedLogger((prefix ?? "") + childPrefix); + prefixLogger.getChild = (childPrefix): Logger => { + // create the new child logger + const childLogger = getPrefixedLogger((prefix ?? "") + childPrefix); + // Assign the methodFactory from the parent logger. + // This is useful if we add extensions to the parent logger that modifies + // its methodFactory. (An example extension is: storing each log to a rageshake db) + childLogger.methodFactory = prefixLogger.methodFactory; + // Rebuild the child logger with the new methodFactory. + childLogger.rebuild(); + return childLogger; + }; prefixLogger.setLevel(loglevel.levels.DEBUG, false); } @@ -146,7 +161,7 @@ function getPrefixedLogger(prefix?: string): LoggerWithLogMethod { * Drop-in replacement for `console` using {@link https://www.npmjs.com/package/loglevel|loglevel}. * Can be tailored down to specific use cases if needed. */ -export const logger = getPrefixedLogger(); +export const logger = getPrefixedLogger() as LoggerWithLogMethod; /** * A "span" for grouping related log lines together. diff --git a/src/matrixrtc/MatrixRTCSessionManager.ts b/src/matrixrtc/MatrixRTCSessionManager.ts index d3db4accea..02a3f20c43 100644 --- a/src/matrixrtc/MatrixRTCSessionManager.ts +++ b/src/matrixrtc/MatrixRTCSessionManager.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { logger as rootLogger } from "../logger.ts"; +import { logger as rootLogger, type Logger } from "../logger.ts"; import { type MatrixClient, ClientEvent } from "../client.ts"; import { TypedEventEmitter } from "../models/typed-event-emitter.ts"; import { type Room } from "../models/room.ts"; @@ -23,8 +23,6 @@ import { type MatrixEvent } from "../models/event.ts"; import { MatrixRTCSession } from "./MatrixRTCSession.ts"; import { EventType } from "../@types/event.ts"; -const logger = rootLogger.getChild("[MatrixRTCSessionManager]"); - export enum MatrixRTCSessionManagerEvents { // A member has joined the MatrixRTC session, creating an active session in a room where there wasn't previously SessionStarted = "session_started", @@ -50,8 +48,10 @@ export class MatrixRTCSessionManager extends TypedEventEmitter(); + private logger: Logger; public constructor(private client: MatrixClient) { super(); + this.logger = rootLogger.getChild("[MatrixRTCSessionManager]"); } public start(): void { @@ -105,7 +105,7 @@ export class MatrixRTCSessionManager extends TypedEventEmitter { const room = this.client.getRoom(event.getRoomId()); if (!room) { - logger.error(`Got room state event for unknown room ${event.getRoomId()}!`); + this.logger.error(`Got room state event for unknown room ${event.getRoomId()}!`); return; } @@ -129,10 +129,10 @@ export class MatrixRTCSessionManager extends TypedEventEmitter 0; if (wasActiveAndKnown && !nowActive) { - logger.trace(`Session ended for ${room.roomId} (${session.memberships.length} members)`); + this.logger.trace(`Session ended for ${room.roomId} (${session.memberships.length} members)`); this.emit(MatrixRTCSessionManagerEvents.SessionEnded, room.roomId, this.roomSessions.get(room.roomId)!); } else if (!wasActiveAndKnown && nowActive) { - logger.trace(`Session started for ${room.roomId} (${session.memberships.length} members)`); + this.logger.trace(`Session started for ${room.roomId} (${session.memberships.length} members)`); this.emit(MatrixRTCSessionManagerEvents.SessionStarted, room.roomId, this.roomSessions.get(room.roomId)!); } } diff --git a/yarn.lock b/yarn.lock index 1705d25db0..45d5011bb6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5081,7 +5081,7 @@ log-update@^6.1.0: strip-ansi "^7.1.0" wrap-ansi "^9.0.0" -loglevel@^1.7.1: +loglevel@^1.9.2: version "1.9.2" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.9.2.tgz#c2e028d6c757720107df4e64508530db6621ba08" integrity sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==