Logging
The DataStax Node.js driver uses events to expose logging information decoupled from any specific logging framework.
The driver’s Client
inherits from EventEmitter
and it triggers 'log'
events.
client.on('log', (level, loggerName, message, furtherInfo) => {
console.log(`${level} - ${loggerName}: ${message}`);
});
The level being passed to the listener can be 'verbose'
, 'info'
, 'warning'
or 'error'
.
verbose
level is only suitable for debugging and it’s usually too noisy. We recommend that you gather logging
events from info
and above on production environments.
Tracking query latency and size
The RequestLogger
logs queries executed by the driver and it allows tracking requests considered slow and/or large.
A request is considered “slow” when it takes longer to complete than a configured threshold in milliseconds. A request is considered to be large when the request size is greater than a configured threshold in bytes.
To turn on this feature, you first need to create an instance of RequestLogger
and use it when creating the Client
instance:
const cassandra = require('cassandra-driver');
const requestTracker = new cassandra.tracker.RequestLogger({ slowThreshold: 1000 });
const client = new Client({ contactPoints, localDataCenter, requestTracker });
You can subscribe to 'slow'
, 'large'
, 'normal'
and 'failure'
events using the emitter object instance:
requestTracker.emitter.on('slow', message => console.log(message));
An example message would be:
[10.1.1.1:9042] Slow request, took 305 ms (request size 35 bytes / response size 1 KB): SELECT col1, col2 FROM table1 WHERE id = ? [1]
Note that events will be emitted only when certain options are defined:
-
'slow'
events will only be emitted ifslowThreshold
is set. -
'large'
events will only be emitted ifrequestSizeThreshold
is set. -
'normal'
events will only be emitted iflogNormalRequests
is set totrue
. This setting can be changed at runtime using theRequestLogger
property of the same name. -
'failure'
events will only be emitted iflogErroredRequests
is set totrue
. This setting can be changed at runtime using the property of the same name.
You can provide your own tracker implementing RequestTracker
interface.