label: true
}
function keysExcluder (key, value) {
- return excludedKeys[key] === true ? undefined : value
+ if (excludedKeys[key] === true) return undefined
+
+ if (key === 'err') return value.stack
+
+ return value
}
-const loggerFormat = winston.format.printf((info) => {
+const consoleLoggerFormat = winston.format.printf(info => {
let additionalInfos = JSON.stringify(info, keysExcluder, 2)
if (additionalInfos === '{}') additionalInfos = ''
else additionalInfos = ' ' + additionalInfos
- if (info.message.stack !== undefined) info.message = info.message.stack
+ if (info.message && info.message.stack !== undefined) info.message = info.message.stack
return `[${info.label}] ${info.timestamp} ${info.level}: ${info.message}${additionalInfos}`
})
+const jsonLoggerFormat = winston.format.printf(infoArg => {
+ let info = infoArg.err
+ ? Object.assign({}, infoArg, { err: infoArg.err.stack })
+ : infoArg
+
+ if (infoArg.message && infoArg.message.stack !== undefined) {
+ info = Object.assign({}, info, { message: infoArg.message.stack })
+ }
+
+ return JSON.stringify(info)
+})
+
const timestampFormatter = winston.format.timestamp({
- format: 'YYYY-MM-DD hh:mm:ss.SSS'
+ format: 'YYYY-MM-DD HH:mm:ss.SSS'
})
const labelFormatter = winston.format.label({
label
maxsize: 5242880,
maxFiles: 5,
format: winston.format.combine(
- timestampFormatter,
+ winston.format.timestamp(),
labelFormatter,
winston.format.splat(),
- winston.format.json()
+ jsonLoggerFormat
)
}),
new winston.transports.Console({
winston.format.splat(),
labelFormatter,
winston.format.colorize(),
- loggerFormat
+ consoleLoggerFormat
)
})
],
exitOnError: true
})
+function bunyanLogFactory (level: string) {
+ return function () {
+ let meta = null
+ let args = [].concat(arguments)
+
+ if (arguments[ 0 ] instanceof Error) {
+ meta = arguments[ 0 ].toString()
+ args = Array.prototype.slice.call(arguments, 1)
+ args.push(meta)
+ } else if (typeof (args[ 0 ]) !== 'string') {
+ meta = arguments[ 0 ]
+ args = Array.prototype.slice.call(arguments, 1)
+ args.push(meta)
+ }
+
+ logger[ level ].apply(logger, args)
+ }
+}
+const bunyanLogger = {
+ trace: bunyanLogFactory('debug'),
+ debug: bunyanLogFactory('debug'),
+ info: bunyanLogFactory('info'),
+ warn: bunyanLogFactory('warn'),
+ error: bunyanLogFactory('error'),
+ fatal: bunyanLogFactory('error')
+}
+
// ---------------------------------------------------------------------------
export {
timestampFormatter,
labelFormatter,
- loggerFormat,
- logger
+ consoleLoggerFormat,
+ logger,
+ bunyanLogger
}