From 50f9652881f0de1e8927efbe7161a3a6e972c2c8 Mon Sep 17 00:00:00 2001 From: Daniel Woelfel Date: Mon, 8 Jun 2026 11:51:07 -0700 Subject: [PATCH 1/3] allow users to pass a custom logger to init --- client/packages/admin/src/index.ts | 25 +++++++++++++---------- client/packages/core/src/Reactor.js | 1 + client/packages/core/src/index.ts | 4 ++++ client/packages/core/src/utils/log.ts | 7 ++++--- client/packages/react-native/src/index.ts | 4 ++++ client/packages/react/src/index.ts | 4 ++++ client/packages/solidjs/src/index.ts | 4 ++++ client/packages/svelte/src/lib/index.ts | 4 ++++ client/packages/vue/src/index.ts | 4 ++++ 9 files changed, 43 insertions(+), 14 deletions(-) diff --git a/client/packages/admin/src/index.ts b/client/packages/admin/src/index.ts index 9ba9037fe0..8b4dc52106 100644 --- a/client/packages/admin/src/index.ts +++ b/client/packages/admin/src/index.ts @@ -81,6 +81,7 @@ import { type ReadableStreamCtor, InstantWritableStream, InstantReadableStream, + type Logger, } from '@instantdb/core'; import version from './version.ts'; @@ -135,6 +136,7 @@ type Config = { useDateObjects?: boolean; disableValidation?: boolean; verbose?: boolean; + logger?: Logger; }; export type InstantConfig< @@ -148,6 +150,7 @@ export type InstantConfig< useDateObjects: UseDates; disableValidation?: boolean; verbose?: boolean; + logger?: Logger; WritableStream?: WritableStreamCtor; ReadableStream?: ReadableStreamCtor; }; @@ -1101,17 +1104,14 @@ type AdminQueryOpts = { fetchOpts?: RequestInit; }; -interface Logger { - info: (...args: any[]) => void; - debug: (...args: any[]) => void; - error: (...args: any[]) => void; -} - -function createLogger(isEnabled: boolean): Logger { +function createLogger( + isEnabled: boolean, + baseLogger: Logger = console, +): Logger { return { - info: isEnabled ? (...args: any[]) => console.info(...args) : () => {}, - debug: isEnabled ? (...args: any[]) => console.debug(...args) : () => {}, - error: isEnabled ? (...args: any[]) => console.error(...args) : () => {}, + info: isEnabled ? (...args: any[]) => baseLogger.info(...args) : () => {}, + debug: isEnabled ? (...args: any[]) => baseLogger.debug(...args) : () => {}, + error: isEnabled ? (...args: any[]) => baseLogger.error(...args) : () => {}, }; } @@ -1154,7 +1154,7 @@ class InstantAdminDatabase< this.streams = new Streams(this.#ensureInstantStream.bind(this)); this.rooms = new Rooms(this.config); this.webhooks = new Webhooks(this.config, jsonFetch); - this.#log = createLogger(!!this.config.verbose); + this.#log = createLogger(!!this.config.verbose, this.config.logger); } /** @@ -1719,4 +1719,7 @@ export { // error types type InstantIssue, + + // logger + type Logger, }; diff --git a/client/packages/core/src/Reactor.js b/client/packages/core/src/Reactor.js index 681be01278..2116402969 100644 --- a/client/packages/core/src/Reactor.js +++ b/client/packages/core/src/Reactor.js @@ -303,6 +303,7 @@ export default class Reactor { this._log = createLogger( config.verbose || flags.devBackend || flags.instantLogs, () => this._reactorStats(), + config.logger, ); this.versions = { ...(versions || {}), '@instantdb/core': version }; diff --git a/client/packages/core/src/index.ts b/client/packages/core/src/index.ts index e48d79d477..10465450d6 100644 --- a/client/packages/core/src/index.ts +++ b/client/packages/core/src/index.ts @@ -29,6 +29,7 @@ import { } from './utils/PersistedObject.ts'; import { createInstantRouteHandler } from './createRouteHandler.ts'; import { parseSchemaFromJSON } from './parseSchemaFromJSON.ts'; +import type { Logger } from './utils/log.ts'; import type { PresenceOpts, @@ -169,6 +170,7 @@ export type Config = { apiURI?: string; devtool?: boolean | DevtoolConfig; verbose?: boolean; + logger?: Logger; queryCacheLimit?: number; useDateObjects: boolean; disableValidation?: boolean; @@ -185,6 +187,7 @@ export type InstantConfig< apiURI?: string; devtool?: boolean | DevtoolConfig; verbose?: boolean; + logger?: Logger; queryCacheLimit?: number; useDateObjects: UseDates; disableValidation?: boolean; @@ -1225,6 +1228,7 @@ export { type StoreInterfaceClass, type StoreInterfaceStoreName, createInstantRouteHandler, + type Logger, }; /** @deprecated Use StoreInterface instead */ diff --git a/client/packages/core/src/utils/log.ts b/client/packages/core/src/utils/log.ts index c7ae06299f..27c4f88d05 100644 --- a/client/packages/core/src/utils/log.ts +++ b/client/packages/core/src/utils/log.ts @@ -7,16 +7,17 @@ export interface Logger { export default function createLogger( isEnabled: boolean, getStats: () => Record, + baseLogger: Logger = console, ): Logger { return { info: isEnabled - ? (...args: any[]) => console.info(...args, getStats()) + ? (...args: any[]) => baseLogger.info(...args, getStats()) : () => {}, debug: isEnabled - ? (...args: any[]) => console.debug(...args, getStats()) + ? (...args: any[]) => baseLogger.debug(...args, getStats()) : () => {}, error: isEnabled - ? (...args: any[]) => console.error(...args, getStats()) + ? (...args: any[]) => baseLogger.error(...args, getStats()) : () => {}, }; } diff --git a/client/packages/react-native/src/index.ts b/client/packages/react-native/src/index.ts index 35a0eb76d0..386a9c9abf 100644 --- a/client/packages/react-native/src/index.ts +++ b/client/packages/react-native/src/index.ts @@ -102,6 +102,7 @@ import { CreateWriteStreamOpts, InstantWritableStream, InstantReadableStream, + type Logger, } from '@instantdb/core'; /** @@ -283,4 +284,7 @@ export { type SyncTableSyncTransaction, type SyncTableLoadFromStorage, type SyncTableSetupError, + + // logger + type Logger, }; diff --git a/client/packages/react/src/index.ts b/client/packages/react/src/index.ts index b92020412a..d561867634 100644 --- a/client/packages/react/src/index.ts +++ b/client/packages/react/src/index.ts @@ -95,6 +95,7 @@ import { type StoreInterfaceStoreName, InstantWritableStream, InstantReadableStream, + type Logger, } from '@instantdb/core'; import { InstantReactAbstractDatabase } from '@instantdb/react-common'; @@ -212,4 +213,7 @@ export { // Server helper createInstantRouteHandler, + + // logger + type Logger, }; diff --git a/client/packages/solidjs/src/index.ts b/client/packages/solidjs/src/index.ts index 69beef09d8..712c425425 100644 --- a/client/packages/solidjs/src/index.ts +++ b/client/packages/solidjs/src/index.ts @@ -88,6 +88,7 @@ import { StoreInterface, createInstantRouteHandler, type StoreInterfaceStoreName, + type Logger, } from '@instantdb/core'; import { InstantSolidDatabase } from './InstantSolidDatabase.js'; @@ -191,4 +192,7 @@ export { // Server helper createInstantRouteHandler, + + // logger + type Logger, }; diff --git a/client/packages/svelte/src/lib/index.ts b/client/packages/svelte/src/lib/index.ts index 92b32bb239..a5507dd8fc 100644 --- a/client/packages/svelte/src/lib/index.ts +++ b/client/packages/svelte/src/lib/index.ts @@ -88,6 +88,7 @@ import { StoreInterface, createInstantRouteHandler, type StoreInterfaceStoreName, + type Logger, } from '@instantdb/core'; import { InstantSvelteDatabase } from './InstantSvelteDatabase.svelte.js'; @@ -197,4 +198,7 @@ export { // Server helper createInstantRouteHandler, + + // logger + type Logger, }; diff --git a/client/packages/vue/src/index.ts b/client/packages/vue/src/index.ts index 1fd2588066..6a37f05276 100644 --- a/client/packages/vue/src/index.ts +++ b/client/packages/vue/src/index.ts @@ -88,6 +88,7 @@ import { StoreInterface, createInstantRouteHandler, type StoreInterfaceStoreName, + type Logger, } from '@instantdb/core'; import { InstantVueDatabase, init } from './InstantVueDatabase.js'; @@ -196,4 +197,7 @@ export { // Server helper createInstantRouteHandler, + + // logger + type Logger, }; From 0afe605924b3a6f754ade0cdb9a9a4583d54bcad Mon Sep 17 00:00:00 2001 From: Daniel Woelfel Date: Mon, 8 Jun 2026 13:28:08 -0700 Subject: [PATCH 2/3] Bump version to v1.0.44 --- client/packages/version/src/version.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/packages/version/src/version.ts b/client/packages/version/src/version.ts index e9ea493f05..e55d29df92 100644 --- a/client/packages/version/src/version.ts +++ b/client/packages/version/src/version.ts @@ -2,6 +2,6 @@ // Update the version here and merge your code to main to // publish a new version of all of the packages to npm. -const version = 'v1.0.43'; +const version = 'v1.0.44'; export { version }; From 66be1fb73f4872a58f2d5340cf9262b7fe39ccf1 Mon Sep 17 00:00:00 2001 From: Daniel Woelfel Date: Mon, 8 Jun 2026 13:31:19 -0700 Subject: [PATCH 3/3] Bump version to v1.0.45 --- client/packages/version/src/version.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/packages/version/src/version.ts b/client/packages/version/src/version.ts index e55d29df92..2e8b9aa50c 100644 --- a/client/packages/version/src/version.ts +++ b/client/packages/version/src/version.ts @@ -2,6 +2,6 @@ // Update the version here and merge your code to main to // publish a new version of all of the packages to npm. -const version = 'v1.0.44'; +const version = 'v1.0.45'; export { version };