2.2.3 • Published 28 days ago

@global-savings-group/extension-logs v2.2.3

Weekly downloads
-
License
-
Repository
-
Last release
28 days ago

Extension logs and monitoring service

Based on DataDog and required Megatron clientHash as session ID.

Documentation: https://docs.datadoghq.com/logs/error_tracking/browser_and_mobile?tab=browser

Usage

Install package:

  • npm install @global-savings-group/extension-logs

Import log service and init in project:

// Logger.ts
import { ExtensionLogsService } from '@global-savings-group/extension-logs';

// IMPORTANT: 
// If using more than one instance of ExtensionLogsService, 
// each instance must have a unique store key.
// In the example below, the default store key is "DataDogLogger".
export const logsService = new ExtensionLogsService();

/**
 * init() can be called asynchronously and any log calls (debug, error, info, warn) will be queued until then
 * init() can be called multiple times to change options or enable/disable logging
 * if init() is not called within 60s, it logs error to console as reminder to avoid memory leaks
 */
logsService.init({
  // required for enabling logging to DataDog API
  // if omitted or set to undefined - logging is disabled
  clientToken: '{DataDog client token}',
  
  // optional; values: 'local' | 'production' | 'staging'
  env: 'production',
  
  // required
  service: '{brand}:extension',
  
  // optional session ID
  sessionId: '{Megatron clientHash}',

  // optional - send logs for X% of sessions
  // value [0..1] - 0%..100%; default value - 1 (send logs for all sessions)
  sessionSampleRate: 0.2, // log 20% of all sessions
  
  // optional - limit logs per 24h that are sent to DataDog
  // default value - undefined (send all logs)
  threshold: 2000,
  
  // optional version
  version: chrome.runtime.getManifest().version,
});

logsService.logConsoleErrors();
logsService.logUnhandledErrors();

/**
 * ExtensionLogsService logs
 *
 * Every log method accepts these params:
 * - message: string
 * - data?: object - additional data
 * - forceLog?: boolean - set to true to always log, overriding the sessionSampleRate set in init() or threshold value
 */

logsService.debug({
  message: 'Debug message',
  data: { 'x': 'y' }, // addtional log data
  forceLog: true, // force logging; ignores sessionSampleRate or threshold
});

logsService.error({
  message: 'Error message',
  origin: 'custom',
  stack: '{call stack as string}'
});

logsService.info({
  message: 'Info message',
});

logsService.warn({
  message: 'Warn message',
});

Enable session logging:

// background.ts
const sessionTrackAlarmName = 'session:track';
chrome.alarms.onAlarm.addListener(async (alarm) => {
  if (alarm.name === sessionTrackAlarmName) {
    logsService.ping();
  }
});

chrome.alarms.create(sessionTrackAlarmName, { periodInMinutes: 10 });

Optionally, ping() supports callback to add custom session data:

const getSessionData = () => ({
  my_custom_session_data: 'some data',
  another_key: 'more data',
});

logsService.ping(getSessionData);
2.2.3

28 days ago

2.2.2

1 month ago

2.2.1

2 months ago

2.2.0

3 months ago

2.1.0

4 months ago

2.0.3

4 months ago

2.0.2

5 months ago

2.0.1

5 months ago

1.4.0

5 months ago

1.2.0

8 months ago

1.1.0

9 months ago

1.3.1

6 months ago

1.3.0

6 months ago

1.2.1

7 months ago

1.0.7

1 year ago

1.0.6

1 year ago