0.4.8 • Published 2 months ago

client-logger v0.4.8

Weekly downloads
6
License
MIT
Repository
-
Last release
2 months ago

ClientLogger

Library for sending logs and stats through a proxy server with a transport protocol of choice.

Usage

import {Publisher, Logger, StatsRecorder, transports} from 'client-logger';

const publisher = new Publisher();

// This must be called to set the window unload listener and to start sending
// telemetry to the server periodically. Otherwise you have to manually call
// publisher.flush() each time you wish to send telemetry to the server.
publisher.start();

publisher.addTransport(
  new transports.HttpTransport({
    url: 'https://my-logs-server.com/',
    method: 'POST',
    encode: ({logs, stats}) => {
      return JSON.stringify({logs: logs || [], stats: stats || []});
    };
  })
);

const logger = new Logger({
  publisher: publisher,
  tags: {
    app_version: 'some-version',
    user_agent: window.navigator.userAgent,
    lazy_tag: () => 'evaluated-on-log'
  }
});

const statsRecorder = new StatsRecorder({
  publisher: publisher,
  globalTags: [
    'app_version:some-version'
  ]
});

Configuration

const publisher = new Publisher({
  publishInterval: 3000, // in milliseconds
  maximumBatchSize: 50,
  maximumBufferSize: 1000
});

Logger

Logger is similar to the Console logger. It supports debug, log, info, warn and error calls.

logger.info('Hello World', {sender: 'mars'});

Logger by default doesn't print anything to the dev console. This however can be enabled by calling logger.enableLiveLogs(). It will also save the preference in the local storage.

Stats Recorder

Stats recorder uses statsd interface: timing, increment, decrement, gauge, histogram, set.

statsRecorder.increment('user.connected');

Transports

There are currently two transports available: HttpTransport and CustomTransport.

Transports are tried in order. If publish fails with one transport then the next one is used instead.

publisher.addTransport(
  new transports.CustomTransport(({payload}) => {
    // Send payload which includes {logs, stats} over some custom mechanism
    // Return promise which resolves when the request has succeeded and rejects otherwise
  })
);

publisher.addTransport(
  new transports.HttpTransport({
    url: 'https://my-logs-server.com/',
    method: 'POST',
    encode: ({logs, stats}) => {
      return JSON.stringify({logs, stats});
    };
  })
);

Transports can be added at any time. It's also possible to specify the order by using position:

  publisher.addTransport(transport);
  publisher.addTransport(otherTransport, {position: 0}); // This makes sure otherTransport is tried first
0.4.8

2 months ago

0.4.7

2 months ago

0.4.6

4 months ago

0.4.4

2 years ago

0.4.3

3 years ago

0.4.2

3 years ago

0.4.1

4 years ago

0.4.0

4 years ago

0.1.0

5 years ago