// FIXME: use async
mkdirpSync(CONFIG.STORAGE.LOG_DIR)
-function loggerReplacer (key: string, value: any) {
- if (value instanceof Error) {
- const error = {}
+function getLoggerReplacer () {
+ const seen = new WeakSet()
- Object.getOwnPropertyNames(value).forEach(key => error[ key ] = value[ key ])
+ // Thanks: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value#Examples
+ return (key: string, value: any) => {
+ if (typeof value === 'object' && value !== null) {
+ if (seen.has(value)) return
- return error
- }
+ seen.add(value)
+ }
+
+ if (value instanceof Error) {
+ const error = {}
+
+ Object.getOwnPropertyNames(value).forEach(key => error[ key ] = value[ key ])
- return value
+ return error
+ }
+
+ return value
+ }
}
const consoleLoggerFormat = winston.format.printf(info => {
const obj = omit(info, 'label', 'timestamp', 'level', 'message')
- let additionalInfos = JSON.stringify(obj, loggerReplacer, 2)
+ let additionalInfos = JSON.stringify(obj, getLoggerReplacer(), 2)
if (additionalInfos === undefined || additionalInfos === '{}') additionalInfos = ''
else additionalInfos = ' ' + additionalInfos
})
const jsonLoggerFormat = winston.format.printf(info => {
- return JSON.stringify(info, loggerReplacer)
+ return JSON.stringify(info, getLoggerReplacer())
})
const timestampFormatter = winston.format.timestamp({
})
const fileLoggerOptions: FileTransportOptions = {
-
filename: path.join(CONFIG.STORAGE.LOG_DIR, 'peertube.log'),
handleExceptions: true,
format: winston.format.combine(