Skip to content

Commit d445b60

Browse files
committed
Change child loggers (getChild) to LogSpans
With the child loggers, we ended up not seeing the logs in the rageshake because it requires a custom configuration in element call to write the child loggers (with getChild) into the rageshake log. LogSpans are a lightweight alternative that still use the same logger but only extend the prefix and hence end up in the rageshake without registering new loggers. It prohibits the footgun of not getting logs in the rageshake.
1 parent a52c64b commit d445b60

10 files changed

+37
-36
lines changed

spec/unit/matrixrtc/memberManagerTestEnvironment.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ It is very specific to the MembershipManager.spec.ts file and introduces the fol
2828

2929
import { TestEnvironment } from "jest-environment-jsdom";
3030

31-
import { logger as rootLogger } from "../../../src/logger";
32-
const logger = rootLogger.getChild("[MatrixRTCSession]");
31+
import { LogSpan, logger as rootLogger } from "../../../src/logger";
32+
const logger = new LogSpan(rootLogger, "[MatrixRTCSession]");
3333

3434
class MemberManagerTestEnvironment extends TestEnvironment {
3535
handleTestEvent(event: any) {

src/matrixrtc/EncryptionManager.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { type Logger, logger as rootLogger } from "../logger.ts";
1+
import { type BaseLogger, LogSpan, logger as rootLogger } from "../logger.ts";
22
import { type EncryptionConfig } from "./MatrixRTCSession.ts";
33
import { secureRandomBase64Url } from "../randomstring.ts";
44
import { decodeBase64, encodeUnpaddedBase64 } from "../base64.ts";
@@ -81,7 +81,7 @@ export class EncryptionManager implements IEncryptionManager {
8181

8282
private latestGeneratedKeyIndex = -1;
8383
private joinConfig: EncryptionConfig | undefined;
84-
private logger: Logger;
84+
private logger: LogSpan;
8585
public constructor(
8686
private userId: string,
8787
private deviceId: string,
@@ -93,9 +93,9 @@ export class EncryptionManager implements IEncryptionManager {
9393
encryptionKeyIndex: number,
9494
participantId: string,
9595
) => void,
96-
parentLogger?: Logger,
96+
parentLogger?: BaseLogger,
9797
) {
98-
this.logger = (parentLogger ?? rootLogger).getChild(`[EncryptionManager]`);
98+
this.logger = new LogSpan(parentLogger ?? rootLogger, "[EncryptionManager]");
9999
}
100100

101101
public getEncryptionKeys(): Map<string, Array<{ key: Uint8Array; timestamp: number }>> {

src/matrixrtc/MatrixRTCSession.ts

+6-4
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
import { type Logger, logger as rootLogger } from "../logger.ts";
17+
import { LogSpan, logger as rootLogger } from "../logger.ts";
1818
import { TypedEventEmitter } from "../models/typed-event-emitter.ts";
1919
import { EventTimeline } from "../models/event-timeline.ts";
2020
import { type Room } from "../models/room.ts";
@@ -176,7 +176,7 @@ export class MatrixRTCSession extends TypedEventEmitter<
176176
private encryptionManager?: IEncryptionManager;
177177
// The session Id of the call, this is the call_id of the call Member event.
178178
private _callId: string | undefined;
179-
private logger: Logger;
179+
private logger: LogSpan;
180180
/**
181181
* This timeout is responsible to track any expiration. We need to know when we have to start
182182
* 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<
213213
public static callMembershipsForRoom(
214214
room: Pick<Room, "getLiveTimeline" | "roomId" | "hasMembershipState">,
215215
): CallMembership[] {
216-
const logger = rootLogger.getChild(`[MatrixRTCSession ${room.roomId}]`);
216+
const logger = new LogSpan(rootLogger, `[MatrixRTCSession ${room.roomId}]`);
217+
217218
const roomState = room.getLiveTimeline().getState(EventTimeline.FORWARDS);
218219
if (!roomState) {
219220
logger.warn("Couldn't get state for room " + room.roomId);
@@ -329,7 +330,8 @@ export class MatrixRTCSession extends TypedEventEmitter<
329330
public memberships: CallMembership[],
330331
) {
331332
super();
332-
this.logger = rootLogger.getChild(`[MatrixRTCSession ${roomSubset.roomId}]`);
333+
this.logger = new LogSpan(rootLogger, `[MatrixRTCSession ${roomSubset.roomId}]`);
334+
333335
this._callId = memberships[0]?.callId;
334336
const roomState = this.roomSubset.getLiveTimeline().getState(EventTimeline.FORWARDS);
335337
// TODO: double check if this is actually needed. Should be covered by refreshRoom in MatrixRTCSessionManager

src/matrixrtc/MatrixRTCSessionManager.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
import { logger as rootLogger } from "../logger.ts";
17+
import { LogSpan, logger as rootLogger } from "../logger.ts";
1818
import { type MatrixClient, ClientEvent } from "../client.ts";
1919
import { TypedEventEmitter } from "../models/typed-event-emitter.ts";
2020
import { type Room } from "../models/room.ts";
@@ -23,7 +23,7 @@ import { type MatrixEvent } from "../models/event.ts";
2323
import { MatrixRTCSession } from "./MatrixRTCSession.ts";
2424
import { EventType } from "../@types/event.ts";
2525

26-
const logger = rootLogger.getChild("[MatrixRTCSessionManager]");
26+
const logger = new LogSpan(rootLogger, `[MatrixRTCSessionManager]`);
2727

2828
export enum MatrixRTCSessionManagerEvents {
2929
// A member has joined the MatrixRTC session, creating an active session in a room where there wasn't previously

src/matrixrtc/NewMembershipManager.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import { UpdateDelayedEventAction } from "../@types/requests.ts";
1919
import { type MatrixClient } from "../client.ts";
2020
import { UnsupportedDelayedEventsEndpointError } from "../errors.ts";
2121
import { ConnectionError, HTTPError, MatrixError } from "../http-api/errors.ts";
22-
import { type Logger, logger as rootLogger } from "../logger.ts";
22+
import { type BaseLogger, LogSpan, logger as rootLogger } from "../logger.ts";
2323
import { type Room } from "../models/room.ts";
2424
import { defer, type IDeferred } from "../utils.ts";
2525
import { type CallMembership, DEFAULT_EXPIRE_DURATION, type SessionMembershipData } from "./CallMembership.ts";
@@ -144,7 +144,7 @@ export class MembershipManager
144144
implements IMembershipManager
145145
{
146146
private activated = false;
147-
private logger: Logger;
147+
private logger: LogSpan;
148148

149149
public isActivated(): boolean {
150150
return this.activated;
@@ -281,10 +281,10 @@ export class MembershipManager
281281
| "_unstable_updateDelayedEvent"
282282
>,
283283
private getOldestMembership: () => CallMembership | undefined,
284-
parentLogger?: Logger,
284+
parentLogger?: BaseLogger,
285285
) {
286286
super();
287-
this.logger = (parentLogger ?? rootLogger).getChild(`[NewMembershipManager]`);
287+
this.logger = new LogSpan(parentLogger ?? rootLogger, `[NewMembershipManager]`);
288288
const [userId, deviceId] = [this.client.getUserId(), this.client.getDeviceId()];
289289
if (userId === null) throw Error("Missing userId in client");
290290
if (deviceId === null) throw Error("Missing deviceId in client");
@@ -297,14 +297,14 @@ export class MembershipManager
297297
// is equivalent to running it at the end of the loop. (just after applying the status/action list changes)
298298
// This order is required because this method needs to return the action updates.
299299
this.logger.debug(
300-
`MembershipManager applied action changes. Status: ${this.oldStatus} -> ${this.status}`,
300+
`applied action changes. Status: ${this.oldStatus} -> ${this.status}`,
301301
);
302302
if (this.oldStatus !== this.status) {
303303
this.emit(MembershipManagerEvent.StatusChanged, this.oldStatus, this.status);
304304
}
305305
}
306306
this.oldStatus = this.status;
307-
this.logger.debug(`MembershipManager before processing action. status=${this.oldStatus}`);
307+
this.logger.debug(`before processing action. status=${this.oldStatus}`);
308308
return this.membershipLoopHandler(type);
309309
}, this.logger);
310310
}

src/matrixrtc/NewMembershipManagerActionScheduler.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { type Logger, logger as rootLogger } from "../logger.ts";
1+
import { type BaseLogger, LogSpan, logger as rootLogger } from "../logger.ts";
22
import { type EmptyObject } from "../matrix.ts";
33
import { sleep } from "../utils.ts";
44
import { MembershipActionType } from "./NewMembershipManager.ts";
@@ -38,7 +38,7 @@ export type ActionUpdate =
3838
* @internal
3939
*/
4040
export class ActionScheduler {
41-
private logger: Logger;
41+
private logger: LogSpan;
4242
/**
4343
* This is tracking the state of the scheduler loop.
4444
* Only used to prevent starting the loop twice.
@@ -48,9 +48,9 @@ export class ActionScheduler {
4848
public constructor(
4949
/** This is the callback called for each scheduled action (`this.addAction()`) */
5050
private membershipLoopHandler: (type: MembershipActionType) => Promise<ActionUpdate>,
51-
parentLogger?: Logger,
51+
parentLogger?: BaseLogger,
5252
) {
53-
this.logger = (parentLogger ?? rootLogger).getChild(`[NewMembershipActionScheduler]`);
53+
this.logger = new LogSpan(parentLogger ?? rootLogger, `[NewMembershipActionScheduler]`);
5454
}
5555

5656
// function for the wakeup mechanism (in case we add an action externally and need to leave the current sleep)

src/matrixrtc/RoomAndToDeviceKeyTransport.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
import { logger as rootLogger, type Logger } from "../logger.ts";
17+
import { type BaseLogger, LogSpan, logger as rootLogger } from "../logger.ts";
1818
import { KeyTransportEvents, type KeyTransportEventsHandlerMap, type IKeyTransport } from "./IKeyTransport.ts";
1919
import { type CallMembership } from "./CallMembership.ts";
2020
import type { RoomKeyTransport } from "./RoomKeyTransport.ts";
@@ -49,15 +49,15 @@ export class RoomAndToDeviceTransport
4949
>
5050
implements IKeyTransport
5151
{
52-
private readonly logger: Logger;
52+
private readonly logger: LogSpan;
5353
private _enabled: EnabledTransports = { toDevice: true, room: false };
5454
public constructor(
5555
private toDeviceTransport: ToDeviceKeyTransport,
5656
private roomKeyTransport: RoomKeyTransport,
57-
parentLogger?: Logger,
57+
parentLogger?: BaseLogger,
5858
) {
5959
super();
60-
this.logger = (parentLogger ?? rootLogger).getChild(`[RoomAndToDeviceTransport]`);
60+
this.logger = new LogSpan(parentLogger ?? rootLogger, `[RoomAndToDeviceTransport]`);
6161
// update parent loggers for the sub transports so filtering for `RoomAndToDeviceTransport` contains their logs too
6262
this.toDeviceTransport.setParentLogger(this.logger);
6363
this.roomKeyTransport.setParentLogger(this.logger);

src/matrixrtc/RoomKeyTransport.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import type { MatrixClient } from "../client.ts";
1818
import type { EncryptionKeysEventContent, Statistics } from "./types.ts";
1919
import { EventType } from "../@types/event.ts";
2020
import { type MatrixError } from "../http-api/errors.ts";
21-
import { logger as rootLogger, type Logger } from "../logger.ts";
21+
import { type BaseLogger, LogSpan, logger as rootLogger, type Logger } from "../logger.ts";
2222
import { KeyTransportEvents, type KeyTransportEventsHandlerMap, type IKeyTransport } from "./IKeyTransport.ts";
2323
import { type MatrixEvent } from "../models/event.ts";
2424
import { type CallMembership } from "./CallMembership.ts";
@@ -29,9 +29,9 @@ export class RoomKeyTransport
2929
extends TypedEventEmitter<KeyTransportEvents, KeyTransportEventsHandlerMap>
3030
implements IKeyTransport
3131
{
32-
private logger: Logger = rootLogger;
33-
public setParentLogger(parentLogger: Logger): void {
34-
this.logger = parentLogger.getChild(`[RoomKeyTransport]`);
32+
private logger: BaseLogger = rootLogger;
33+
public setParentLogger(parentLogger: BaseLogger): void {
34+
this.logger = new LogSpan(parentLogger, `[RoomKeyTransport]`);
3535
}
3636
public constructor(
3737
private room: Pick<Room, "on" | "off" | "roomId">,

src/matrixrtc/ToDeviceKeyTransport.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ limitations under the License.
1616

1717
import { TypedEventEmitter } from "../models/typed-event-emitter.ts";
1818
import { type IKeyTransport, KeyTransportEvents, type KeyTransportEventsHandlerMap } from "./IKeyTransport.ts";
19-
import { type Logger, logger as rootLogger } from "../logger.ts";
19+
import { type BaseLogger, LogSpan, logger as rootLogger } from "../logger.ts";
2020
import type { CallMembership } from "./CallMembership.ts";
2121
import type { EncryptionKeysToDeviceEventContent, Statistics } from "./types.ts";
2222
import { ClientEvent, type MatrixClient } from "../client.ts";
@@ -31,9 +31,9 @@ export class ToDeviceKeyTransport
3131
extends TypedEventEmitter<KeyTransportEvents, KeyTransportEventsHandlerMap>
3232
implements IKeyTransport
3333
{
34-
private logger: Logger = rootLogger;
35-
public setParentLogger(parentLogger: Logger): void {
36-
this.logger = parentLogger.getChild(`[ToDeviceKeyTransport]`);
34+
private logger: BaseLogger = rootLogger;
35+
public setParentLogger(parentLogger: BaseLogger): void {
36+
this.logger = new LogSpan(parentLogger, `[ToDeviceKeyTransport]`);
3737
}
3838

3939
public constructor(
@@ -42,7 +42,7 @@ export class ToDeviceKeyTransport
4242
private roomId: string,
4343
private client: Pick<MatrixClient, "encryptAndSendToDevice" | "on" | "off">,
4444
private statistics: Statistics,
45-
parentLogger?: Logger,
45+
parentLogger?: BaseLogger,
4646
) {
4747
super();
4848
this.setParentLogger(parentLogger ?? rootLogger);

src/matrixrtc/types.ts

-1
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@ export interface EncryptionKeysToDeviceEventContent {
4242
call_id: string;
4343
scope: string;
4444
};
45-
// Why is this needed?
4645
sent_ts?: number;
4746
}
4847

0 commit comments

Comments
 (0)