@rentspree/express-elasticsearch-logger
Advanced tools
Comparing version 4.0.0 to 4.0.1
@@ -27,3 +27,2 @@ const indexSettings = { | ||
ignore_above: 256, | ||
normalizer: "lowercase", | ||
}, | ||
@@ -70,3 +69,3 @@ }, | ||
}, | ||
acceptencoding: { | ||
"accept-encoding": { | ||
type: "keyword", | ||
@@ -79,26 +78,32 @@ normalizer: "lowercase", | ||
}, | ||
cdnloop: { | ||
"api-key": { | ||
type: "keyword", | ||
}, | ||
"cdn-loop": { | ||
type: "keyword", | ||
normalizer: "lowercase", | ||
}, | ||
cfconnectingip: { | ||
"cf-connecting-ip": { | ||
type: "keyword", | ||
normalizer: "lowercase", | ||
}, | ||
cfipcountry: { | ||
"cf-ipcountry": { | ||
type: "keyword", | ||
normalizer: "lowercase", | ||
}, | ||
cfray: { | ||
"cf-ray": { | ||
type: "keyword", | ||
normalizer: "lowercase", | ||
}, | ||
cfvisitor: { | ||
"cf-request-id": { | ||
type: "keyword", | ||
}, | ||
"cf-visitor": { | ||
type: "keyword", | ||
normalizer: "lowercase", | ||
}, | ||
contentlength: { | ||
"content-length": { | ||
type: "integer", | ||
}, | ||
contenttype: { | ||
"content-type": { | ||
type: "keyword", | ||
@@ -111,39 +116,39 @@ normalizer: "lowercase", | ||
}, | ||
useragent: { | ||
"user-agent": { | ||
type: "text", | ||
analyzer: "standard", | ||
}, | ||
xforwardedfor: { | ||
"x-forwarded-for": { | ||
type: "keyword", | ||
normalizer: "lowercase", | ||
}, | ||
xforwardedhost: { | ||
"x-forwarded-host": { | ||
type: "keyword", | ||
normalizer: "lowercase", | ||
}, | ||
xforwardedport: { | ||
"x-forwarded-port": { | ||
type: "keyword", | ||
normalizer: "lowercase", | ||
}, | ||
xforwardedproto: { | ||
"x-forwarded-proto": { | ||
type: "keyword", | ||
normalizer: "lowercase", | ||
}, | ||
xoriginalforwardedfor: { | ||
"x-original-forwarded-for": { | ||
type: "keyword", | ||
normalizer: "lowercase", | ||
}, | ||
xoriginaluri: { | ||
"x-original-uri": { | ||
type: "keyword", | ||
normalizer: "lowercase", | ||
}, | ||
xrealip: { | ||
"x-real-ip": { | ||
type: "keyword", | ||
normalizer: "lowercase", | ||
}, | ||
xrequestid: { | ||
"x-request-id": { | ||
type: "keyword", | ||
normalizer: "lowercase", | ||
}, | ||
xscheme: { | ||
"x-scheme": { | ||
type: "keyword", | ||
@@ -150,0 +155,0 @@ normalizer: "lowercase", |
@@ -67,12 +67,13 @@ /* eslint-disable no-console */ | ||
* @param {Object} config elasticsearch configuration | ||
* @param {String=} config.index elasticsearch index (default: log_YEAR_MONTH) | ||
* @param {String} [config.host="http://localhost:9200"] elasticsearch host to connect | ||
* @param {String} [config.index="log_[YYYY]-h[1|2]"] elasticsearch index (default: log_YYYY-h1 or log_YYYY-h2 bi-annually) | ||
* @param {Object} config.whitelist | ||
* @param {Array.<String>} config.whitelist.request request properties to log | ||
* @param {Array.<String>} config.whitelist.response response properties to log | ||
* @param {Array.<String>} config.censor list of request body properties to censor | ||
* @param {Boolean} config.includeDefault include default whitelist and censor the the given config | ||
* @param {String?} config.indexPrefix elasticsearch index prefix for running index | ||
* @param {String?} config.indexSuffixBy elasticsearch index suffix for running index, one of m M <Monthly> q Q <Quarterly> h H <Bi-annually> | ||
* @param {Object?} config.indexSettings settings in the mapping to be created | ||
* @param {elasticsearch.Client=} client elasticsearch client | ||
* @param {Array.<String>} [config.whitelist.request=["userId","body","email","httpVersion","headers","method","originalUrl","path","query"]] request properties to log | ||
* @param {Array.<String>} [config.whitelist.response=["statusCode", "sent", "took"]] response properties to log | ||
* @param {Array.<String>} [config.censor=["password"]] list of request body properties to censor | ||
* @param {Boolean} [config.includeDefault=true] include default whitelist and censor the the given config | ||
* @param {String} [config.indexPrefix="log"] elasticsearch index prefix for running index | ||
* @param {String} [config.indexSuffixBy="halfYear"] elasticsearch index suffix for running index, one of m M month (Monthly) q Q quarter (Quarterly) h H halfYear (Bi-annually) | ||
* @param {Object} [config.indexSettings] settings in the mapping to be created | ||
* @param {elasticsearch.Client=} client @elastic/elasticsearch client to be injected | ||
* @returns {elasticsearchLoggerMiddleware} express middleware | ||
@@ -114,3 +115,3 @@ */ | ||
const start = Date.now() | ||
const indexName = config.index || getIndexName() | ||
/** | ||
@@ -123,3 +124,3 @@ * Document indexed with ElasticSearch. `request` and `response` properties | ||
* @property {Number} duration milliseconds between request and response | ||
* @property {Object} request | ||
* @property {Object} request requst object detail of express | ||
* @property {String} request.httpVersion | ||
@@ -144,3 +145,2 @@ * @property {Object} request.headers | ||
*/ | ||
const indexName = config.index || getIndexName() | ||
const doc = { | ||
@@ -147,0 +147,0 @@ env: process.env.NODE_ENV || "development", |
{ | ||
"name": "@rentspree/express-elasticsearch-logger", | ||
"description": "Log Express app requests to ElasticSearch.", | ||
"version": "4.0.0", | ||
"version": "4.0.1", | ||
"homepage": "https://github.com/rentspree/express-elasticsearch-logger", | ||
@@ -66,3 +66,3 @@ "author": { | ||
"http-errors": "^1.7.3", | ||
"jsdoc-to-markdown": "^1.3.4", | ||
"jsdoc-to-markdown": "^5.0.3", | ||
"jshint": "^2.9.2", | ||
@@ -69,0 +69,0 @@ "jshint-stylish": "^2.1.0", |
156
README.md
@@ -14,66 +14,47 @@ # express-elasticsearch-logger [![Build Status](http://img.shields.io/travis/alexmingoia/express-elasticsearch-logger.svg?style=flat)](http://travis-ci.org/alexmingoia/express-elasticsearch-logger) [![Code Coverage](http://img.shields.io/coveralls/alexmingoia/express-elasticsearch-logger.svg?style=flat)](https://coveralls.io/r/alexmingoia/express-elasticsearch-logger) [![NPM version](http://img.shields.io/npm/v/express-elasticsearch-logger.svg?style=flat)](https://www.npmjs.org/package/express-elasticsearch-logger) [![Dependency Status](http://img.shields.io/david/alexmingoia/express-elasticsearch-logger.svg?style=flat)](https://david-dm.org/alexmingoia/express-elasticsearch-logger) | ||
## API Reference | ||
<a name="module_express-elasticsearch-logger"></a> | ||
### Configuration | ||
```javascript | ||
const {requestHandler} = require('@rentspree/express-elasticsearch-logger') | ||
app.use( | ||
requestHandler({ | ||
host:'http://localhost:9200', | ||
index: undefined, //use prefix and suffix instead fixing the index name | ||
whitelist:{ | ||
request:['user'], | ||
response:['my_response'], | ||
}, | ||
censor:['password'], | ||
includeDefault:true, // for whitelist and censor, include the predefined value or not | ||
// below example will make index name 'service_log_q3' | ||
indexPrefix :'service_log', | ||
indexSuffixBy :'quarter', //available are monthly('m','M','month'), quarterly('q','Q','quarter') and bi-annually('h','H','halfYear') | ||
indexSettings:{ // custom setting for index creating | ||
index:{ | ||
refresh_interval:'20s' | ||
} | ||
} | ||
}) | ||
) | ||
``` | ||
## @rentspree/express-elasticsearch-logger | ||
**Members** | ||
* [express-elasticsearch-logger](#module_express-elasticsearch-logger) | ||
* [logger.request](#module_express-elasticsearch-logger.request) | ||
* [logger.requestHandler(config, [client])](#module_express-elasticsearch-logger.requestHandler) | ||
* [logger.errorHandler(err, req, res, next)](#module_express-elasticsearch-logger.errorHandler) | ||
* [.doc](#module_express-elasticsearch-logger.doc) : <code>Object</code> | ||
* [.requestHandler(config, [client])](#module_express-elasticsearch-logger.requestHandler) ⇒ <code>elasticsearchLoggerMiddleware</code> | ||
* [.errorHandler(err, req, res, next)](#module_express-elasticsearch-logger.errorHandler) | ||
* [.skipLog(req, res, next)](#module_express-elasticsearch-logger.skipLog) | ||
<a name="module_express-elasticsearch-logger.request"></a> | ||
##logger.request | ||
<a name="module_express-elasticsearch-logger.doc"></a> | ||
### express-elasticsearch-logger.doc : <code>Object</code> | ||
Document indexed with ElasticSearch. `request` and `response` properties | ||
are included if they are whitelisted by `config.whitelist`. | ||
**Kind**: static constant of [<code>express-elasticsearch-logger</code>](#module_express-elasticsearch-logger) | ||
**Properties** | ||
- env `String` - defaults to "development" | ||
- error `Error` - error object passed to `next()` | ||
- duration `Number` - milliseconds between request and response | ||
- request `Object` | ||
- request.httpVersion `String` | ||
- request.headers `Object` | ||
- request.method `String` | ||
- request.originalUrl `String` | ||
- request.route.path `String` | ||
- request.path `String` | ||
- request.query `Object` | ||
- response `Object` | ||
- response.statusCode `Number` | ||
- os `Object` | ||
- os.totalmem `Number` - OS total memory in bytes | ||
- os.freemem `Number` - OS free memory in bytes | ||
- os.loadavg `Array.<Number>` - Array of 5, 10, and 15 min averages | ||
- process `Object` | ||
- process.memoryUsage `Number` - process memory in bytes | ||
- @timestamp `String` - ISO time of request | ||
| Name | Type | Description | | ||
| --- | --- | --- | | ||
| env | <code>String</code> | defaults to "development" | | ||
| [error] | <code>Error</code> | error object passed to `next()` | | ||
| duration | <code>Number</code> | milliseconds between request and response | | ||
| request | <code>Object</code> | requst object detail of express | | ||
| request.httpVersion | <code>String</code> | | | ||
| request.headers | <code>Object</code> | | | ||
| request.method | <code>String</code> | | | ||
| request.originalUrl | <code>String</code> | | | ||
| request.route.path | <code>String</code> | | | ||
| request.path | <code>String</code> | | | ||
| request.query | <code>Object</code> | | | ||
| response | <code>Object</code> | | | ||
| response.statusCode | <code>Number</code> | | | ||
| os | <code>Object</code> | | | ||
| os.totalmem | <code>Number</code> | OS total memory in bytes | | ||
| os.freemem | <code>Number</code> | OS free memory in bytes | | ||
| os.loadavg | <code>Array.<Number></code> | Array of 5, 10, and 15 min averages | | ||
| process | <code>Object</code> | | | ||
| process.memoryUsage | <code>Number</code> | process memory in bytes | | ||
| @timestamp | <code>String</code> | ISO time of request | | ||
**Type**: `Object` | ||
<a name="module_express-elasticsearch-logger.requestHandler"></a> | ||
##logger.requestHandler(config, [client]) | ||
### express-elasticsearch-logger.requestHandler(config, [client]) ⇒ <code>elasticsearchLoggerMiddleware</code> | ||
Returns Express middleware configured according to given `options`. | ||
@@ -85,20 +66,26 @@ | ||
**Params** | ||
**Kind**: static method of [<code>express-elasticsearch-logger</code>](#module_express-elasticsearch-logger) | ||
**Returns**: <code>elasticsearchLoggerMiddleware</code> - express middleware | ||
- config `Object` - elasticsearch configuration | ||
- \[index\] `String` - elasticsearch index (default: log_YEAR_MONTH) | ||
- \[type\] `String` - elasticsearch request type (default: request) | ||
- whitelist `Object` | ||
- request `Array.<String>` - request properties to log | ||
- response `Array.<String>` - response properties to log | ||
- censor `Array.<String>` - list of request body properties to censor, this config will deep censor your data. for example, if you input `'data.deepdata'`, your property `deepdata` inside `data` object will be marked as **CENSORED** | ||
- \[client\] `elasticsearch.Client` - elasticsearch client | ||
| Param | Type | Default | Description | | ||
| --- | --- | --- | --- | | ||
| config | <code>Object</code> | | elasticsearch configuration | | ||
| [config.host] | <code>String</code> | <code>"http://localhost:9200"</code> | elasticsearch host to connect | | ||
| [config.index] | <code>String</code> | <code>"log_[YYYY]-h[1\|2]"</code> | elasticsearch index (default: log_YYYY-h1 or log_YYYY-h2 as bi-annually) | | ||
| config.whitelist | <code>Object</code> | | | | ||
| [config.whitelist.request] | <code>Array.<String></code> | <code>["userId","body","email","httpVersion","headers","method","originalUrl","path","query"]</code> | request properties to log | | ||
| [config.whitelist.response] | <code>Array.<String></code> | <code>["statusCode", "sent", "took"]</code> | response properties to log | | ||
| [config.censor] | <code>Array.<String></code> | <code>["password"]</code> | list of request body properties to censor | | ||
| [config.includeDefault] | <code>Boolean</code> | <code>true</code> | include default whitelist and censor the the given config | | ||
| [config.indexPrefix] | <code>String</code> | <code>"log"</code> | elasticsearch index prefix for running index | | ||
| [config.indexSuffixBy] | <code>String</code> | <code>"halfYear"</code> | elasticsearch index suffix for running index, one of m M month (Monthly) q Q quarter (Quarterly) h H halfYear (Bi-annually) | | ||
| [config.indexSettings] | <code>Object</code> | <pre>{</br>index: {</br> number_of_shards: "3",</br> number_of_replicas: "2",</br> refresh_interval: "60s",</br> analysis: {</br> normalizer: {</br> lowercase: {</br> type: "custom",</br> char_filter: [],</br> filter: ["lowercase"],</br> },</br> },</br> },</br> },</br>}</pre> | settings in the mapping to be created | | ||
| [client] | <code>elasticsearch.Client</code> | | @elastic/elasticsearch client to be injected | | ||
**Returns**: `elasticsearchLoggerMiddleware` - express middleware | ||
**Example** | ||
```javascript | ||
var express = require('express'); | ||
var logger = require('express-elasticsearch-logger'); | ||
const express = require('express'); | ||
const logger = require('express-elasticsearch-logger'); | ||
var app = express(); | ||
const app = express(); | ||
@@ -108,12 +95,13 @@ app | ||
host: 'http://localhost:9200' | ||
})) | ||
}) | ||
.get('/', function (req, res, next) { | ||
res.sendStatus(204); | ||
}) | ||
.use(logger.errorHandler) | ||
.listen(8888); | ||
.use(logger.errorHandler); | ||
``` | ||
* [.requestHandler(config, [client])](#module_express-elasticsearch-logger.requestHandler) ⇒ <code>elasticsearchLoggerMiddleware</code> | ||
<a name="module_express-elasticsearch-logger.errorHandler"></a> | ||
##logger.errorHandler(err, req, res, next) | ||
### express-elasticsearch-logger.errorHandler(err, req, res, next) | ||
Error handler middleware exposes error to `Response#end` | ||
@@ -125,9 +113,27 @@ | ||
**Params** | ||
**Kind**: static method of [<code>express-elasticsearch-logger</code>](#module_express-elasticsearch-logger) | ||
- err `Error` | ||
- req `express.Request` | ||
- res `express.Response` | ||
- next `express.Request.next` | ||
| Param | Type | | ||
| --- | --- | | ||
| err | <code>Error</code> | | ||
| req | <code>express.Request</code> | | ||
| res | <code>express.Response</code> | | ||
| next | <code>express.Request.next</code> | | ||
<a name="module_express-elasticsearch-logger.skipLog"></a> | ||
### express-elasticsearch-logger.skipLog(req, res, next) | ||
This middleware will mark for skip log | ||
use this middleware for endpoint that is called too often and did not need to log | ||
like healthcheck | ||
**Kind**: static method of [<code>express-elasticsearch-logger</code>](#module_express-elasticsearch-logger) | ||
| Param | Type | | ||
| --- | --- | | ||
| req | <code>express.Request</code> | | ||
| res | <code>express.Response</code> | | ||
| next | <code>express.Request.next</code> | | ||
## Contributing | ||
@@ -134,0 +140,0 @@ |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
30006
661
146
0