Skip to content

Commit ec512dd

Browse files
committed
add custom logger per #115
1 parent 2353583 commit ec512dd

File tree

4 files changed

+60
-2
lines changed

4 files changed

+60
-2
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -859,6 +859,7 @@ Logging can be enabled by setting the `logger` option to `true` when creating th
859859
| detail | `boolean` | Enables/disables adding `REQUEST` and `RESPONSE` data to all log entries. | `false` |
860860
| level | `string` | Minimum logging level to send logs for. See [Logging Levels](#logging-levels). | `info` |
861861
| levels | `object` | Key/value pairs of custom log levels and their priority. See [Custom Logging Levels](#custom-logging-levels). | |
862+
| log | `function` | Custom function for overriding standard `console.log`. | `console.log` |
862863
| messageKey | `string` | Sets the JSON property name of the log "message". | `msg` |
863864
| multiValue | `boolean` | Enables multi-value support for querystrings. If enabled, the `qs` parameter will return all values as `array`s and will include multiple values if they exist. | `false` |
864865
| nested | `boolean` | Enables/disables nesting of JSON logs for serializer data. See [Serializers](#serializers). | `false` |

index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ class API {
311311

312312
// Output logs
313313
response._request._logs.forEach(log => {
314-
console.log(JSON.stringify(this._logger.detail ? // eslint-disable-line no-console
314+
this._logger.logger(JSON.stringify(this._logger.detail ? // eslint-disable-line no-console
315315
this._logger.format(log,response._request,response) : log))
316316
})
317317

@@ -321,7 +321,7 @@ class API {
321321
this._logger.log('access',undefined,response._request,response._request.context),
322322
{ statusCode: res.statusCode, coldStart: response._request.coldStart, count: response._request.requestCount }
323323
)
324-
console.log(JSON.stringify(this._logger.format(access,response._request,response))) // eslint-disable-line no-console
324+
this._logger.logger(JSON.stringify(this._logger.format(access,response._request,response))) // eslint-disable-line no-console
325325
}
326326

327327
// Reset global error code

lib/logger.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ exports.config = (config,levels) => {
9090
custom: cfg.serializers && typeof cfg.serializers.custom === 'function' ? cfg.serializers.custom : () => {}
9191
}
9292

93+
// Overridable logging function
94+
let logger = cfg.log && typeof cfg.log === 'function' ? cfg.log : (...a) => console.log(...a)
95+
9396
// Main logging function
9497
let log = (level,msg,req,context,custom) => {
9598

@@ -134,6 +137,7 @@ exports.config = (config,levels) => {
134137
return {
135138
level,
136139
stack,
140+
logger,
137141
log,
138142
format,
139143
access,

test/log.js

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,9 @@ const api_noAccessLogs = require('../index')({ version: 'v1.0', logger: { access
1717
const api_nested = require('../index')({ version: 'v1.0', logger: { nested: true, access: true } })
1818
const api_withDetail = require('../index')({ version: 'v1.0', logger: { detail: true } })
1919
const api_showStackTrace = require('../index')({ version: 'v1.0', logger: { stack: true } })
20+
const api_customLogger = require('../index')({ version: 'v1.0', logger: {
21+
log: (x) => console.log(JSON.stringify(Object.assign(JSON.parse(x),{ LOGGER: true })))
22+
} })
2023
const api_customLevels = require('../index')({ version: 'v1.0', logger: {
2124
levels: {
2225
testDebug: 35,
@@ -186,6 +189,11 @@ api_customSerializers.get('/', (req,res) => {
186189
res.send('done')
187190
})
188191

192+
api_customLogger.get('/', (req,res) => {
193+
req.log.info('info message','second param')
194+
res.send('done')
195+
})
196+
189197
api_default.get('/array', (req,res) => {
190198
req.log.info('info message',['val1','val2','val3'])
191199
res.send('done')
@@ -1005,4 +1013,49 @@ describe('Logging Tests:', function() {
10051013
}) // end it
10061014

10071015

1016+
it('Custom Logger', async function() {
1017+
console.log = logger
1018+
let _event = Object.assign({},event,{ path: '/' })
1019+
let result = await new Promise(r => api_customLogger.run(_event,context,(e,res) => { r(res) }))
1020+
console.log = consoleLog
1021+
1022+
expect(result).to.deep.equal({
1023+
multiValueHeaders: { 'content-type': ['application/json'] },
1024+
statusCode: 200,
1025+
body: 'done',
1026+
isBase64Encoded: false
1027+
})
1028+
1029+
expect(_log).to.have.length(2)
1030+
expect(_log[0].level).to.equal('info')
1031+
expect(_log[1].level).to.equal('access')
1032+
// standard log
1033+
expect(_log[0]).to.have.property('LOGGER')
1034+
expect(_log[0]).to.have.property('time')
1035+
expect(_log[0]).to.have.property('id')
1036+
expect(_log[0]).to.have.property('route')
1037+
expect(_log[0]).to.have.property('msg')
1038+
expect(_log[0]).to.have.property('timer')
1039+
expect(_log[0]).to.have.property('remaining')
1040+
expect(_log[0]).to.have.property('function')
1041+
expect(_log[0]).to.have.property('memory')
1042+
expect(_log[0]).to.have.property('int')
1043+
1044+
expect(_log[1]).to.have.property('LOGGER')
1045+
expect(_log[1]).to.have.property('time')
1046+
expect(_log[1]).to.have.property('id')
1047+
expect(_log[1]).to.have.property('route')
1048+
expect(_log[1]).to.have.property('timer')
1049+
expect(_log[1]).to.have.property('remaining')
1050+
expect(_log[1]).to.have.property('function')
1051+
expect(_log[1]).to.have.property('memory')
1052+
expect(_log[1]).to.have.property('coldStart')
1053+
expect(_log[1]).to.have.property('path')
1054+
expect(_log[1]).to.have.property('ip')
1055+
expect(_log[1]).to.have.property('ua')
1056+
expect(_log[1]).to.have.property('version')
1057+
expect(_log[1]).to.have.property('device')
1058+
expect(_log[1]).to.have.property('country')
1059+
}) // end it
1060+
10081061
})

0 commit comments

Comments
 (0)