client-logger
v0.4.8
Published
Library for sending logs and stats through a proxy server with a transport protocol of choice.
Downloads
25
Readme
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