Skip to content

Commit 24a815a

Browse files
thomasballingerConvex, Inc.
authored andcommitted
Opt out of logging (#37020)
Make opting out of logging simpler by allowing a boolean to be passed to logger in client options. Function line logging is only received by clients when interacting with Convex development deployments, not production deployments; dropping the logs on the floor makes behavior against dev deployments closer to behavior against production ones. GitOrigin-RevId: a5cfd2163726bb0d66a908819810e84507b8b8eb
1 parent 33ed665 commit 24a815a

File tree

4 files changed

+40
-12
lines changed

4 files changed

+40
-12
lines changed

npm-packages/convex/src/browser/http_client.ts

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,12 @@ import {
1212
convexToJson,
1313
jsonToConvex,
1414
} from "../values/index.js";
15-
import { instantiateDefaultLogger, logForFunction, Logger } from "./logging.js";
15+
import {
16+
instantiateDefaultLogger,
17+
instantiateNoopLogger,
18+
logForFunction,
19+
Logger,
20+
} from "./logging.js";
1621
import { FunctionArgs, UserIdentityAttributes } from "../server/index.js";
1722

1823
export const STATUS_CODE_OK = 200;
@@ -62,7 +67,10 @@ export class ConvexHttpClient {
6267
*/
6368
constructor(
6469
address: string,
65-
options?: { skipConvexDeploymentUrlCheck?: boolean; logger?: Logger },
70+
options?: {
71+
skipConvexDeploymentUrlCheck?: boolean;
72+
logger?: Logger | boolean;
73+
},
6674
) {
6775
if (typeof options === "boolean") {
6876
throw new Error(
@@ -73,7 +81,12 @@ export class ConvexHttpClient {
7381
if (opts.skipConvexDeploymentUrlCheck !== true) {
7482
validateDeploymentUrl(address);
7583
}
76-
this.logger = opts.logger ?? instantiateDefaultLogger({ verbose: false });
84+
this.logger =
85+
options?.logger === false
86+
? instantiateNoopLogger({ verbose: false })
87+
: options?.logger !== true && options?.logger
88+
? options.logger
89+
: instantiateDefaultLogger({ verbose: false });
7790
this.address = address;
7891
this.debug = true;
7992
}

npm-packages/convex/src/browser/logging.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,10 @@ export function instantiateDefaultLogger(options: {
110110
return logger;
111111
}
112112

113+
export function instantiateNoopLogger(options: { verbose: boolean }): Logger {
114+
return new Logger(options);
115+
}
116+
113117
export function logForFunction(
114118
logger: Logger,
115119
type: "info" | "error",

npm-packages/convex/src/browser/sync/client.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import {
44
createHybridErrorStacktrace,
55
forwardData,
66
instantiateDefaultLogger,
7+
instantiateNoopLogger,
78
logFatalError,
89
Logger,
910
} from "../logging.js";
@@ -70,12 +71,12 @@ export interface BaseConvexClientOptions {
7071
*/
7172
verbose?: boolean;
7273
/**
73-
* A logger. If not provided, logs to the console.
74+
* A logger, `true`, or `false`. If not provided or `true`, logs to the console.
75+
* If `false`, logs are not printed anywhere.
7476
*
75-
* You can construct your own logger to customize logging to log elsewhere
76-
* or not log at all.
77+
* You can construct your own logger to customize logging to log elsewhere.
7778
*/
78-
logger?: Logger;
79+
logger?: Logger | boolean;
7980
/**
8081
* Sends additional metrics to Convex for debugging purposes.
8182
*
@@ -255,8 +256,11 @@ export class BaseConvexClient {
255256
this.debug = options.reportDebugInfoToConvex ?? false;
256257
this.address = address;
257258
this.logger =
258-
options.logger ??
259-
instantiateDefaultLogger({ verbose: options.verbose ?? false });
259+
options.logger === false
260+
? instantiateNoopLogger({ verbose: options.verbose ?? false })
261+
: options.logger !== true && options.logger
262+
? options.logger
263+
: instantiateDefaultLogger({ verbose: options.verbose ?? false });
260264
// Substitute http(s) with ws(s)
261265
const i = address.search("://");
262266
if (i === -1) {

npm-packages/convex/src/react/client.ts

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@ import {
2121
makeFunctionReference,
2222
} from "../server/api.js";
2323
import { EmptyObject } from "../server/registration.js";
24-
import { instantiateDefaultLogger, Logger } from "../browser/logging.js";
24+
import {
25+
instantiateDefaultLogger,
26+
instantiateNoopLogger,
27+
Logger,
28+
} from "../browser/logging.js";
2529

2630
if (typeof React === "undefined") {
2731
throw new Error("Required dependency 'react' not found");
@@ -256,8 +260,11 @@ export class ConvexReactClient {
256260
this.address = address;
257261
this.listeners = new Map();
258262
this._logger =
259-
options?.logger ??
260-
instantiateDefaultLogger({ verbose: options?.verbose ?? false });
263+
options?.logger === false
264+
? instantiateNoopLogger({ verbose: options?.verbose ?? false })
265+
: options?.logger !== true && options?.logger
266+
? options.logger
267+
: instantiateDefaultLogger({ verbose: options?.verbose ?? false });
261268
this.options = { ...options, logger: this._logger };
262269
}
263270

0 commit comments

Comments
 (0)