Note: Requires Sails.js version >=0.11.0-rc Note: Works out of the box with Sails 1.x
Sails JS hook to activate morgan request logging for yoursails app.
It can also automatically rotate your log file using the file-stream-rotator module
Forked from sails-hook-requestlogger
npm install sails-hook-requestlogger-file
Just lift your app as normal and all your server requests will be logged, with useful information such as response-time, straight to your console. As a default it is activated in your dev environment but deactivated in production.
By default, configuration lives in sails.config.requestloggerfile
.
Parameter | Type | Details |
---|---|---|
format | ((string)) | Defines which logging format to use. Deaults to dev . |
logLocation | ((string)) | Defines where to log: console , file or rotateFile . Defaults to console . If rotateFile is specified, the log file will be rotated as per fileRotationOptions config |
fileLocation | ((string)) | Location of file relative to project root (if file or rotateFile is specified in logLocation . This has no effect if console is specified in logLocation . |
inDevelopment | ((boolean)) | Whether or not to log requests in development environment. Defaults to true . |
inProduction | ((boolean)) | Whether or not to log requests in production environment Defaults to false . |
fileRotationOptions | ((Object)) | A JSON Object (details here) defining the log file rotation properties (if rotateFile is specified in logLocation . This has no effect if console /file is specified in logLocation . |
formatType | ((string)) | Defines which formatType to use for logging: default or json . Defaults to default and use format config option. If set to json , uses jsonFormat config option and logs will be written in JSON (stringify ed) format. |
jsonFormat | ((Object)) | A JSON Object (details here) defining which JSON format to use for logging. This has no effect unless formatType is set to json . |
fileRotationOptions
defaults
Parameter | Type | Default Value |
---|---|---|
frequency | ((string)) | daily |
verbose | ((string)) | false |
date_format | ((string)) | YYYYMMDD |
jsonFormat
defaults
{
date: {
token: 'date',
params: [],
prefix: '',
suffix: ''
},
identifier: {
token: 'request-field',
params: ['identifier'],
prefix: '',
suffix: ''
},
remoteAddr: {
token: 'remote-addr',
params: [],
prefix: '',
suffix: ''
},
method: {
token: 'method',
params: [],
prefix: '',
suffix: ''
},
url: {
token: 'url',
params: [],
prefix: '',
suffix: ''
},
status: {
token: 'status',
params: [],
prefix: '',
suffix: ''
},
contentLength: {
token: 'res',
params: ['content-length'],
prefix: '',
suffix: ''
},
responseTime: {
token: 'response-time',
params: [],
prefix: '',
suffix: ' ms'
},
userAgent: {
token: 'user-agent',
params: [],
prefix: '',
suffix: ''
}
}
Here, identifier: {token: 'request-field',params: ['identifier']},
uses a custom token
named ``, (provided by the hook out of the box!), to use the req.identifier
in the JSON format.
jsonFormat
to be specified in the following format:
{
key: {
token: 'tokenName',
params: ['Array','of', 'params','to','be','sent','to','morgan\'s tokens method','after req,res'],
prefix: 'string',
suffix: 'string'
}
}
Example:
The default values of jsonFormat
will translate to:
morgan(function (tokens, req, res) {
return JSON.stringify({
date: tokens.date(req, res),
identifier: tokens['request-field'](req, res, 'identifier'),
remoteAddr: tokens['remote-addr'](req, res),
method: tokens.method(req, res),
url: tokens.url(req, res),
status: tokens.status(req, res),
contentLength: tokens.res(req, res, 'content-length'),
responseTime: tokens['response-time'](req, res) + ' ms',
userAgent: tokens['user-agent'](req, res)
});
}
morgan.token('request-field', function getRequestField(req, res, field) {
return req[field];
});
That’s it!