// Create the directory if it does not exist
mkdirp.sync(CONFIG.STORAGE.LOG_DIR)
-// Use object for better performances (~ O(1))
-const excludedKeys = {
- level: true,
- message: true,
- splat: true,
- timestamp: true,
- label: true
-}
-function keysExcluder (key, value) {
- if (excludedKeys[key] === true) return undefined
+function loggerReplacer (key: string, value: any) {
+ if (value instanceof Error) {
+ const error = {}
+
+ Object.getOwnPropertyNames(value).forEach(key => error[ key ] = value[ key ])
- if (key === 'err') return value.stack
+ return error
+ }
return value
}
const consoleLoggerFormat = winston.format.printf(info => {
- let additionalInfos = JSON.stringify(info, keysExcluder, 2)
- if (additionalInfos === '{}') additionalInfos = ''
+ let additionalInfos = JSON.stringify(info.meta, loggerReplacer, 2)
+ if (additionalInfos === undefined || additionalInfos === '{}') additionalInfos = ''
else additionalInfos = ' ' + additionalInfos
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
-
- return JSON.stringify(info)
+const jsonLoggerFormat = winston.format.printf(info => {
+ return JSON.stringify(info, loggerReplacer)
})
const timestampFormatter = winston.format.timestamp({
const logger = winston.createLogger({
level: CONFIG.LOG.LEVEL,
+ format: winston.format.combine(
+ labelFormatter,
+ winston.format.splat()
+ ),
transports: [
new winston.transports.File({
filename: path.join(CONFIG.STORAGE.LOG_DIR, 'peertube.log'),
handleExceptions: true,
- maxsize: 5242880,
+ maxsize: 1024 * 1024 * 30,
maxFiles: 5,
format: winston.format.combine(
winston.format.timestamp(),
- labelFormatter,
- winston.format.splat(),
jsonLoggerFormat
)
}),
handleExceptions: true,
format: winston.format.combine(
timestampFormatter,
- winston.format.splat(),
- labelFormatter,
winston.format.colorize(),
consoleLoggerFormat
)