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, className, message, furtherInfo) => {
console.log('log event: %s -- %s', level, 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 dse = require('dse-driver');
const requestTracker = new dse.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 if slowThreshold
is set.
- 'large'
events will only be emitted if requestSizeThreshold
is set.
- 'normal'
events will only be emitted if logNormalRequests
is set to true
. This setting can be changed at
runtime using the RequestLogger
property of the same name.
- 'failure'
events will only be emitted if logErroredRequests
is set to true
. This setting can be changed at
runtime using the property of the same name.
You can provide your own tracker implementing RequestTracker
interface.