Winston: Циклическая структура в JSON: ведение журнала секвелизации

Созданный на 5 нояб. 2017  ·  3Комментарии  ·  Источник: winstonjs/winston

Код:

const winston = require('winston');

const sequelize = new Sequelize(config.db.database, config.db.username, config.db.password, {
    host: config.db.host,
    dialect: config.db.dialect,
    logging: winston.info // Not work it
});

Версии:

winston: 3.0.0-rc1
sequelize: 4.22.2
mysql2: 1.4.2

Стек ошибок:

Unhandled rejection TypeError: Converting circular structure to JSON
    at Object.stringify (native)
    at Format.transform (/demo/node_modules/logform/json.js:13:24)
    at DerivedLogger._transform (/demo/node_modules/winston/lib/winston/logger.js:218:25)
    at DerivedLogger.Transform._read (_stream_transform.js:167:10)
    at DerivedLogger.Transform._write (_stream_transform.js:155:12)
    at doWrite (_stream_writable.js:331:12)
    at writeOrBuffer (_stream_writable.js:317:5)
    at DerivedLogger.Writable.write (_stream_writable.js:243:11)
    at DerivedLogger.log (/demo/node_modules/winston/lib/winston/logger.js:174:8)
    at DerivedLogger.(anonymous function) [as info] (/demo/node_modules/winston/lib/winston/create-logger.js:54:16)
    at winston.(anonymous function) (/demo/node_modules/winston/lib/winston.js:84:34)
    at Sequelize.log (/demo/node_modules/sequelize/lib/sequelize.js:1062:23)
    at Query.run (/demo/node_modules/sequelize/lib/dialects/mysql/query.js:39:22)
    at retry (/demo/node_modules/sequelize/lib/sequelize.js:543:32)
    at /demo/node_modules/retry-as-promised/index.js:39:21
    at Promise._execute (/demo/node_modules/bluebird/js/release/debuggability.js:300:9)
    at Promise._resolveFromExecutor (/demo/node_modules/bluebird/js/release/promise.js:483:18)
    at new Promise (/demo/node_modules/bluebird/js/release/promise.js:79:10)
    at retryAsPromised (/demo/node_modules/retry-as-promised/index.js:29:10)
    at Promise.try.then.connection (/demo/node_modules/sequelize/lib/sequelize.js:543:14)
    at tryCatcher (/demo/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/demo/node_modules/bluebird/js/release/promise.js:512:31)

Альтернатива решения
Использовал
круговой-json
экземпляр
https://github.com/winstonjs/logform/blob/master/json.js#L13

Самый полезный комментарий

Я считаю, что это связано с сиквелизом, а не с Уинстоном.
Мы столкнулись с этой проблемой после обновления sequelize до версии 4.
Я думаю, что из этой версии функция регистрации вызывается с двумя аргументами sql и некоторым объектом sequelize (я не могу вспомнить, что это был за объект). Winston пытается регистрировать каждый переданный аргумент, поэтому он также попытался сохранить объект, что не предназначено для регистрации.

Чтобы исправить это, попробуйте перенести вызов журнала Winston в другую функцию.

const winston = require('winston');

const sequelize = new Sequelize(config.db.database, config.db.username, config.db.password, {
    host: config.db.host,
    dialect: config.db.dialect,
    logging: function(sql, sequelizeObject) {
        winston.info(sql); // Not work it
    }
});

Все 3 Комментарий

Я считаю, что это связано с сиквелизом, а не с Уинстоном.
Мы столкнулись с этой проблемой после обновления sequelize до версии 4.
Я думаю, что из этой версии функция регистрации вызывается с двумя аргументами sql и некоторым объектом sequelize (я не могу вспомнить, что это был за объект). Winston пытается регистрировать каждый переданный аргумент, поэтому он также попытался сохранить объект, что не предназначено для регистрации.

Чтобы исправить это, попробуйте перенести вызов журнала Winston в другую функцию.

const winston = require('winston');

const sequelize = new Sequelize(config.db.database, config.db.username, config.db.password, {
    host: config.db.host,
    dialect: config.db.dialect,
    logging: function(sql, sequelizeObject) {
        winston.info(sql); // Not work it
    }
});

Спасибо @matuszeman!

Большое спасибо @matuszeman , я

Была ли эта страница полезной?
0 / 5 - 0 рейтинги