blob: 7661cf32be57de18a0f00112cb9e4d655f144783 [file] [view]
# Logging
The DataStax Node.js driver uses [events][events] to expose logging information decoupled from any specific logging
framework.
The driver's `Client` inherits from [`EventEmitter`][event-emitter] and it triggers `'log'` events.
```javascript
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:
```javascript
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:
```javascript
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.
[events]: https://nodejs.org/api/events.html
[event-emitter]: https://nodejs.org/api/events.html#events_class_eventemitter