
Security News
Attackers Are Hunting High-Impact Node.js Maintainers in a Coordinated Social Engineering Campaign
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.
client-logger
Advanced tools
Library for sending logs and stats through a proxy server with a transport protocol of choice.
Library for sending logs and stats through a proxy server with a transport protocol of choice.
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'
]
});
const publisher = new Publisher({
publishInterval: 3000, // in milliseconds
maximumBatchSize: 50,
maximumBufferSize: 1000
});
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 uses statsd interface: timing, increment, decrement, gauge, histogram, set.
statsRecorder.increment('user.connected');
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
FAQs
Library for sending logs and stats through a proxy server with a transport protocol of choice.
We found that client-logger demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 3 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Multiple high-impact npm maintainers confirm they have been targeted in the same social engineering campaign that compromised Axios.

Security News
Axios compromise traced to social engineering, showing how attacks on maintainers can bypass controls and expose the broader software supply chain.

Security News
Node.js has paused its bug bounty program after funding ended, removing payouts for vulnerability reports but keeping its security process unchanged.