0.4.8 • Published 2 years ago
client-logger v0.4.8
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