diff --git a/spec/unit/matrixrtc/memberManagerTestEnvironment.ts b/spec/unit/matrixrtc/memberManagerTestEnvironment.ts index 65ca4204b..de244b305 100644 --- a/spec/unit/matrixrtc/memberManagerTestEnvironment.ts +++ b/spec/unit/matrixrtc/memberManagerTestEnvironment.ts @@ -28,8 +28,8 @@ It is very specific to the MembershipManager.spec.ts file and introduces the fol import { TestEnvironment } from "jest-environment-jsdom"; -import { logger as rootLogger } from "../../../src/logger"; -const logger = rootLogger.getChild("[MatrixRTCSession]"); +import { LogSpan, logger as rootLogger } from "../../../src/logger"; +const logger = new LogSpan(rootLogger, "[MatrixRTCSession]"); class MemberManagerTestEnvironment extends TestEnvironment { handleTestEvent(event: any) { diff --git a/src/matrixrtc/EncryptionManager.ts b/src/matrixrtc/EncryptionManager.ts index 0b0fe9cb9..56d01c112 100644 --- a/src/matrixrtc/EncryptionManager.ts +++ b/src/matrixrtc/EncryptionManager.ts @@ -1,4 +1,4 @@ -import { type Logger, logger as rootLogger } from "../logger.ts"; +import { type BaseLogger, LogSpan, logger as rootLogger } from "../logger.ts"; import { type EncryptionConfig } from "./MatrixRTCSession.ts"; import { secureRandomBase64Url } from "../randomstring.ts"; import { decodeBase64, encodeUnpaddedBase64 } from "../base64.ts"; @@ -81,7 +81,7 @@ export class EncryptionManager implements IEncryptionManager { private latestGeneratedKeyIndex = -1; private joinConfig: EncryptionConfig | undefined; - private logger: Logger; + private logger: LogSpan; public constructor( private userId: string, private deviceId: string, @@ -93,9 +93,9 @@ export class EncryptionManager implements IEncryptionManager { encryptionKeyIndex: number, participantId: string, ) => void, - parentLogger?: Logger, + parentLogger?: BaseLogger, ) { - this.logger = (parentLogger ?? rootLogger).getChild(`[EncryptionManager]`); + this.logger = new LogSpan(parentLogger ?? rootLogger, "[EncryptionManager]"); } public getEncryptionKeys(): Map> { diff --git a/src/matrixrtc/MatrixRTCSession.ts b/src/matrixrtc/MatrixRTCSession.ts index d20773d2d..d2434a7cd 100644 --- a/src/matrixrtc/MatrixRTCSession.ts +++ b/src/matrixrtc/MatrixRTCSession.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { type Logger, logger as rootLogger } from "../logger.ts"; +import { LogSpan, logger as rootLogger } from "../logger.ts"; import { TypedEventEmitter } from "../models/typed-event-emitter.ts"; import { EventTimeline } from "../models/event-timeline.ts"; import { type Room } from "../models/room.ts"; @@ -176,7 +176,7 @@ export class MatrixRTCSession extends TypedEventEmitter< private encryptionManager?: IEncryptionManager; // The session Id of the call, this is the call_id of the call Member event. private _callId: string | undefined; - private logger: Logger; + private logger: LogSpan; /** * This timeout is responsible to track any expiration. We need to know when we have to start * to ignore other call members. There is no callback for this. This timeout will always be configured to @@ -213,7 +213,8 @@ export class MatrixRTCSession extends TypedEventEmitter< public static callMembershipsForRoom( room: Pick, ): CallMembership[] { - const logger = rootLogger.getChild(`[MatrixRTCSession ${room.roomId}]`); + const logger = new LogSpan(rootLogger, `[MatrixRTCSession ${room.roomId}]`); + const roomState = room.getLiveTimeline().getState(EventTimeline.FORWARDS); if (!roomState) { logger.warn("Couldn't get state for room " + room.roomId); @@ -329,7 +330,8 @@ export class MatrixRTCSession extends TypedEventEmitter< public memberships: CallMembership[], ) { super(); - this.logger = rootLogger.getChild(`[MatrixRTCSession ${roomSubset.roomId}]`); + this.logger = new LogSpan(rootLogger, `[MatrixRTCSession ${roomSubset.roomId}]`); + this._callId = memberships[0]?.callId; const roomState = this.roomSubset.getLiveTimeline().getState(EventTimeline.FORWARDS); // TODO: double check if this is actually needed. Should be covered by refreshRoom in MatrixRTCSessionManager diff --git a/src/matrixrtc/MatrixRTCSessionManager.ts b/src/matrixrtc/MatrixRTCSessionManager.ts index d3db4acce..731980d1b 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 { LogSpan, logger as rootLogger } 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,7 +23,7 @@ import { type MatrixEvent } from "../models/event.ts"; import { MatrixRTCSession } from "./MatrixRTCSession.ts"; import { EventType } from "../@types/event.ts"; -const logger = rootLogger.getChild("[MatrixRTCSessionManager]"); +const logger = new LogSpan(rootLogger, `[MatrixRTCSessionManager]`); export enum MatrixRTCSessionManagerEvents { // A member has joined the MatrixRTC session, creating an active session in a room where there wasn't previously diff --git a/src/matrixrtc/NewMembershipManager.ts b/src/matrixrtc/NewMembershipManager.ts index fad78e216..755114865 100644 --- a/src/matrixrtc/NewMembershipManager.ts +++ b/src/matrixrtc/NewMembershipManager.ts @@ -19,7 +19,7 @@ import { UpdateDelayedEventAction } from "../@types/requests.ts"; import { type MatrixClient } from "../client.ts"; import { UnsupportedDelayedEventsEndpointError } from "../errors.ts"; import { ConnectionError, HTTPError, MatrixError } from "../http-api/errors.ts"; -import { type Logger, logger as rootLogger } from "../logger.ts"; +import { type BaseLogger, LogSpan, logger as rootLogger } from "../logger.ts"; import { type Room } from "../models/room.ts"; import { defer, type IDeferred } from "../utils.ts"; import { type CallMembership, DEFAULT_EXPIRE_DURATION, type SessionMembershipData } from "./CallMembership.ts"; @@ -144,7 +144,7 @@ export class MembershipManager implements IMembershipManager { private activated = false; - private logger: Logger; + private logger: LogSpan; public isActivated(): boolean { return this.activated; @@ -281,10 +281,10 @@ export class MembershipManager | "_unstable_updateDelayedEvent" >, private getOldestMembership: () => CallMembership | undefined, - parentLogger?: Logger, + parentLogger?: BaseLogger, ) { super(); - this.logger = (parentLogger ?? rootLogger).getChild(`[NewMembershipManager]`); + this.logger = new LogSpan(parentLogger ?? rootLogger, `[NewMembershipManager]`); const [userId, deviceId] = [this.client.getUserId(), this.client.getDeviceId()]; if (userId === null) throw Error("Missing userId in client"); if (deviceId === null) throw Error("Missing deviceId in client"); @@ -297,14 +297,14 @@ export class MembershipManager // is equivalent to running it at the end of the loop. (just after applying the status/action list changes) // This order is required because this method needs to return the action updates. this.logger.debug( - `MembershipManager applied action changes. Status: ${this.oldStatus} -> ${this.status}`, + `applied action changes. Status: ${this.oldStatus} -> ${this.status}`, ); if (this.oldStatus !== this.status) { this.emit(MembershipManagerEvent.StatusChanged, this.oldStatus, this.status); } } this.oldStatus = this.status; - this.logger.debug(`MembershipManager before processing action. status=${this.oldStatus}`); + this.logger.debug(`before processing action. status=${this.oldStatus}`); return this.membershipLoopHandler(type); }, this.logger); } diff --git a/src/matrixrtc/NewMembershipManagerActionScheduler.ts b/src/matrixrtc/NewMembershipManagerActionScheduler.ts index 28e2d3d22..e90d2be0c 100644 --- a/src/matrixrtc/NewMembershipManagerActionScheduler.ts +++ b/src/matrixrtc/NewMembershipManagerActionScheduler.ts @@ -1,4 +1,4 @@ -import { type Logger, logger as rootLogger } from "../logger.ts"; +import { type BaseLogger, LogSpan, logger as rootLogger } from "../logger.ts"; import { type EmptyObject } from "../matrix.ts"; import { sleep } from "../utils.ts"; import { MembershipActionType } from "./NewMembershipManager.ts"; @@ -38,7 +38,7 @@ export type ActionUpdate = * @internal */ export class ActionScheduler { - private logger: Logger; + private logger: LogSpan; /** * This is tracking the state of the scheduler loop. * Only used to prevent starting the loop twice. @@ -48,9 +48,9 @@ export class ActionScheduler { public constructor( /** This is the callback called for each scheduled action (`this.addAction()`) */ private membershipLoopHandler: (type: MembershipActionType) => Promise, - parentLogger?: Logger, + parentLogger?: BaseLogger, ) { - this.logger = (parentLogger ?? rootLogger).getChild(`[NewMembershipActionScheduler]`); + this.logger = new LogSpan(parentLogger ?? rootLogger, `[NewMembershipActionScheduler]`); } // function for the wakeup mechanism (in case we add an action externally and need to leave the current sleep) diff --git a/src/matrixrtc/RoomAndToDeviceKeyTransport.ts b/src/matrixrtc/RoomAndToDeviceKeyTransport.ts index a3d656eeb..ddd7e3c3e 100644 --- a/src/matrixrtc/RoomAndToDeviceKeyTransport.ts +++ b/src/matrixrtc/RoomAndToDeviceKeyTransport.ts @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -import { logger as rootLogger, type Logger } from "../logger.ts"; +import { type BaseLogger, LogSpan, logger as rootLogger } from "../logger.ts"; import { KeyTransportEvents, type KeyTransportEventsHandlerMap, type IKeyTransport } from "./IKeyTransport.ts"; import { type CallMembership } from "./CallMembership.ts"; import type { RoomKeyTransport } from "./RoomKeyTransport.ts"; @@ -49,15 +49,15 @@ export class RoomAndToDeviceTransport > implements IKeyTransport { - private readonly logger: Logger; + private readonly logger: LogSpan; private _enabled: EnabledTransports = { toDevice: true, room: false }; public constructor( private toDeviceTransport: ToDeviceKeyTransport, private roomKeyTransport: RoomKeyTransport, - parentLogger?: Logger, + parentLogger?: BaseLogger, ) { super(); - this.logger = (parentLogger ?? rootLogger).getChild(`[RoomAndToDeviceTransport]`); + this.logger = new LogSpan(parentLogger ?? rootLogger, `[RoomAndToDeviceTransport]`); // update parent loggers for the sub transports so filtering for `RoomAndToDeviceTransport` contains their logs too this.toDeviceTransport.setParentLogger(this.logger); this.roomKeyTransport.setParentLogger(this.logger); diff --git a/src/matrixrtc/RoomKeyTransport.ts b/src/matrixrtc/RoomKeyTransport.ts index 5f12d9c55..bc7d834bd 100644 --- a/src/matrixrtc/RoomKeyTransport.ts +++ b/src/matrixrtc/RoomKeyTransport.ts @@ -18,7 +18,7 @@ import type { MatrixClient } from "../client.ts"; import type { EncryptionKeysEventContent, Statistics } from "./types.ts"; import { EventType } from "../@types/event.ts"; import { type MatrixError } from "../http-api/errors.ts"; -import { logger as rootLogger, type Logger } from "../logger.ts"; +import { type BaseLogger, LogSpan, logger as rootLogger, type Logger } from "../logger.ts"; import { KeyTransportEvents, type KeyTransportEventsHandlerMap, type IKeyTransport } from "./IKeyTransport.ts"; import { type MatrixEvent } from "../models/event.ts"; import { type CallMembership } from "./CallMembership.ts"; @@ -29,9 +29,9 @@ export class RoomKeyTransport extends TypedEventEmitter implements IKeyTransport { - private logger: Logger = rootLogger; - public setParentLogger(parentLogger: Logger): void { - this.logger = parentLogger.getChild(`[RoomKeyTransport]`); + private logger: BaseLogger = rootLogger; + public setParentLogger(parentLogger: BaseLogger): void { + this.logger = new LogSpan(parentLogger, `[RoomKeyTransport]`); } public constructor( private room: Pick, diff --git a/src/matrixrtc/ToDeviceKeyTransport.ts b/src/matrixrtc/ToDeviceKeyTransport.ts index 8486b4205..680353b3c 100644 --- a/src/matrixrtc/ToDeviceKeyTransport.ts +++ b/src/matrixrtc/ToDeviceKeyTransport.ts @@ -16,7 +16,7 @@ limitations under the License. import { TypedEventEmitter } from "../models/typed-event-emitter.ts"; import { type IKeyTransport, KeyTransportEvents, type KeyTransportEventsHandlerMap } from "./IKeyTransport.ts"; -import { type Logger, logger as rootLogger } from "../logger.ts"; +import { type BaseLogger, LogSpan, logger as rootLogger } from "../logger.ts"; import type { CallMembership } from "./CallMembership.ts"; import type { EncryptionKeysToDeviceEventContent, Statistics } from "./types.ts"; import { ClientEvent, type MatrixClient } from "../client.ts"; @@ -31,9 +31,9 @@ export class ToDeviceKeyTransport extends TypedEventEmitter implements IKeyTransport { - private logger: Logger = rootLogger; - public setParentLogger(parentLogger: Logger): void { - this.logger = parentLogger.getChild(`[ToDeviceKeyTransport]`); + private logger: BaseLogger = rootLogger; + public setParentLogger(parentLogger: BaseLogger): void { + this.logger = new LogSpan(parentLogger, `[ToDeviceKeyTransport]`); } public constructor( @@ -42,7 +42,7 @@ export class ToDeviceKeyTransport private roomId: string, private client: Pick, private statistics: Statistics, - parentLogger?: Logger, + parentLogger?: BaseLogger, ) { super(); this.setParentLogger(parentLogger ?? rootLogger); diff --git a/src/matrixrtc/types.ts b/src/matrixrtc/types.ts index d408080df..366d5bb60 100644 --- a/src/matrixrtc/types.ts +++ b/src/matrixrtc/types.ts @@ -42,7 +42,6 @@ export interface EncryptionKeysToDeviceEventContent { call_id: string; scope: string; }; - // Why is this needed? sent_ts?: number; }