Add metric method to logger, replace datalake calls with new method
(cherry picked from commit 7a026bbeae75514b64f928d7ff59707c518fd5e5)
This commit is contained in:
+5
-8
@@ -32,6 +32,7 @@ import {
|
||||
import {RouteParams, State} from '#/lib/routes/types'
|
||||
import {attachRouteToLogEvents, logEvent} from '#/lib/statsig/statsig'
|
||||
import {bskyTitle} from '#/lib/strings/headings'
|
||||
import {logger} from '#/logger'
|
||||
import {isNative, isWeb} from '#/platform/detection'
|
||||
import {useModalControls} from '#/state/modals'
|
||||
import {useUnreadNotifications} from '#/state/queries/notifications/unread'
|
||||
@@ -729,20 +730,16 @@ function RoutesContainer({children}: React.PropsWithChildren<{}>) {
|
||||
linking={LINKING}
|
||||
theme={theme}
|
||||
onStateChange={() => {
|
||||
logEvent(
|
||||
'router:navigate',
|
||||
{
|
||||
from: prevLoggedRouteName.current,
|
||||
},
|
||||
{lake: true},
|
||||
)
|
||||
logger.metric('router:navigate', {
|
||||
from: prevLoggedRouteName.current,
|
||||
})
|
||||
prevLoggedRouteName.current = getCurrentRouteName()
|
||||
}}
|
||||
onReady={() => {
|
||||
attachRouteToLogEvents(getCurrentRouteName)
|
||||
logModuleInitTime()
|
||||
onReady()
|
||||
logEvent('router:navigate', {}, {lake: true})
|
||||
logger.metric('router:navigate', {})
|
||||
}}>
|
||||
{children}
|
||||
</NavigationContainer>
|
||||
|
||||
@@ -91,6 +91,9 @@ export function toClout(n: number | null | undefined): number | undefined {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated use `logger.metric()` instead
|
||||
*/
|
||||
export function logEvent<E extends keyof MetricEvents>(
|
||||
eventName: E & string,
|
||||
rawMetadata: MetricEvents[E] & FlatJSONRecord,
|
||||
@@ -111,7 +114,13 @@ export function logEvent<E extends keyof MetricEvents>(
|
||||
}
|
||||
Statsig.logEvent(ev, null, fullMetadata)
|
||||
}
|
||||
logger.info(eventName, fullMetadata)
|
||||
/**
|
||||
* All datalake events should be sent using `logger.metric`, and we don't
|
||||
* want to double-emit logs to other transports.
|
||||
*/
|
||||
if (!options.lake) {
|
||||
logger.info(eventName, fullMetadata)
|
||||
}
|
||||
} catch (e) {
|
||||
// A log should never interrupt the calling code, whatever happens.
|
||||
logger.error('Failed to log an event', {message: e})
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
import {nanoid} from 'nanoid/non-secure'
|
||||
|
||||
import {logEvent} from '#/lib/statsig/statsig'
|
||||
import {add} from '#/logger/logDump'
|
||||
import {MetricEvents} from '#/logger/metrics'
|
||||
import {bitdriftTransport} from '#/logger/transports/bitdrift'
|
||||
import {consoleTransport} from '#/logger/transports/console'
|
||||
import {sentryTransport} from '#/logger/transports/sentry'
|
||||
@@ -89,6 +91,25 @@ export class Logger {
|
||||
this.transport({level: LogLevel.Error, message: error, metadata})
|
||||
}
|
||||
|
||||
metric<E extends keyof MetricEvents>(
|
||||
event: E & string,
|
||||
metadata: MetricEvents[E],
|
||||
options: {
|
||||
/**
|
||||
* Optionally also send to StatSig
|
||||
*/
|
||||
statsig?: boolean
|
||||
} = {statsig: false},
|
||||
) {
|
||||
logEvent(event, metadata, {
|
||||
lake: !options.statsig,
|
||||
})
|
||||
|
||||
for (const transport of this.transports) {
|
||||
transport(LogLevel.Info, LogContext.Metric, event, metadata, Date.now())
|
||||
}
|
||||
}
|
||||
|
||||
addTransport(transport: Transport) {
|
||||
this.transports.push(transport)
|
||||
return () => {
|
||||
|
||||
Reference in New Issue
Block a user