From 35f8a277152d8be0103591d995b14de8eba8d406 Mon Sep 17 00:00:00 2001 From: lukasIO Date: Thu, 14 Mar 2024 10:24:20 +0100 Subject: [PATCH] Add optional datadog log ingest (#213) --- .env.example | 3 ++- lib/Debug.tsx | 35 ++++++++++++++++++++++++++++++++--- package.json | 1 + pnpm-lock.yaml | 18 ++++++++++++++++++ 4 files changed, 53 insertions(+), 4 deletions(-) diff --git a/.env.example b/.env.example index 497ad72..71e686f 100644 --- a/.env.example +++ b/.env.example @@ -10,5 +10,6 @@ LIVEKIT_URL=wss://my-livekit-project.livekit.cloud ## PUBLIC NEXT_PUBLIC_LK_TOKEN_ENDPOINT=/api/token - NEXT_PUBLIC_SHOW_SETTINGS_MENU=true +# NEXT_PUBLIC_DATADOG_CLIENT_TOKEN=client-token +# NEXT_PUBLIC_DATADOG_SITE=datadog-site \ No newline at end of file diff --git a/lib/Debug.tsx b/lib/Debug.tsx index 81191e0..9a1a51c 100644 --- a/lib/Debug.tsx +++ b/lib/Debug.tsx @@ -1,7 +1,9 @@ import * as React from 'react'; import { useRoomContext } from '@livekit/components-react'; -import { setLogLevel, getLogger, LogLevel, RemoteTrackPublication } from 'livekit-client'; +import { setLogLevel, LogLevel, RemoteTrackPublication, setLogExtension } from 'livekit-client'; import { tinykeys } from 'tinykeys'; +import { datadogLogs } from '@datadog/browser-logs'; + import styles from '../styles/Debug.module.css'; export const useDebugMode = ({ logLevel }: { logLevel?: LogLevel }) => { @@ -9,8 +11,35 @@ export const useDebugMode = ({ logLevel }: { logLevel?: LogLevel }) => { React.useEffect(() => { setLogLevel(logLevel ?? 'debug'); - // @ts-ignore - setLogLevel('debug', 'lk-e2ee'); + + if (process.env.NEXT_PUBLIC_DATADOG_CLIENT_TOKEN && process.env.NEXT_PUBLIC_DATADOG_SITE) { + console.log('setting up datadog logs'); + datadogLogs.init({ + clientToken: process.env.NEXT_PUBLIC_DATADOG_CLIENT_TOKEN, + site: process.env.NEXT_PUBLIC_DATADOG_SITE, + forwardErrorsToLogs: true, + sessionSampleRate: 100, + }); + + setLogExtension((level, msg, context) => { + switch (level) { + case LogLevel.debug: + datadogLogs.logger.debug(msg, context); + break; + case LogLevel.info: + datadogLogs.logger.info(msg, context); + break; + case LogLevel.warn: + datadogLogs.logger.warn(msg, context); + break; + case LogLevel.error: + datadogLogs.logger.error(msg, context); + break; + default: + break; + } + }); + } // @ts-expect-error window.__lk_room = room; diff --git a/package.json b/package.json index d4fbb17..fa53706 100644 --- a/package.json +++ b/package.json @@ -9,6 +9,7 @@ "lint": "next lint" }, "dependencies": { + "@datadog/browser-logs": "^5.10.0", "@livekit/components-react": "2.0.3", "@livekit/components-styles": "1.0.10", "@livekit/krisp-noise-filter": "^0.1.3", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e0f9266..51af992 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,6 +5,9 @@ settings: excludeLinksFromLockfile: false dependencies: + '@datadog/browser-logs': + specifier: ^5.10.0 + version: 5.11.0 '@livekit/components-react': specifier: 2.0.3 version: 2.0.3(livekit-client@2.0.7)(react-dom@18.2.0)(react@18.2.0)(tslib@2.6.2) @@ -81,6 +84,21 @@ packages: resolution: {integrity: sha512-i5GE2Dk5ekdlK1TR7SugY4LWRrKSfb5T1Qn4unpIMbfxoeGKERKQ59HG3iYewacGD10SR7UzevfPnh6my4tNmQ==} dev: false + /@datadog/browser-core@5.11.0: + resolution: {integrity: sha512-s5ak4Wf0xrxtlyruYtHZELEil+6ido+Zb/owpaYYU4ca05BDo4slIS03ztRCTYBv1dWpKJ6QkedvfklgWWAn6Q==} + dev: false + + /@datadog/browser-logs@5.11.0: + resolution: {integrity: sha512-EvyZcfFOlQpopBtUIKFzj9cXzKfrALmF3GXUFxV6VfuQ5ByHywYdkdlUs0xGGblHyzXlidA7YEwTJiBa6Hn38A==} + peerDependencies: + '@datadog/browser-rum': 5.11.0 + peerDependenciesMeta: + '@datadog/browser-rum': + optional: true + dependencies: + '@datadog/browser-core': 5.11.0 + dev: false + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}