Kode:
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
});
Versi:
winston: 3.0.0-rc1
sequelize: 4.22.2
mysql2: 1.4.2
Tumpukan kesalahan:
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)
Alternatif solusi
Digunakan
lingkaran-json
contoh
https://github.com/winstonjs/logform/blob/master/json.js#L13
Saya percaya ini terkait dengan sekuel dan bukan winston.
Kami mengalami masalah ini setelah memutakhirkan sekuel ke versi 4.
Saya pikir, dari versi ini, fungsi logging dipanggil dengan dua argumen sql dan beberapa objek sekuel (saya tidak ingat apa objek itu sebenarnya). winston mencoba untuk mencatat setiap argumen yang dilewati sehingga ia juga mencoba membuat sekuel objek, apa yang tidak dimaksudkan untuk dicatat.
Untuk memperbaikinya, coba bungkus winston log call ke fungsi lain.
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
}
});
Terima kasih @matuszeman!
Terima kasih banyak @matuszeman , saya menggaruk-garuk kepala untuk sementara waktu dengan ini!
Komentar yang paling membantu
Saya percaya ini terkait dengan sekuel dan bukan winston.
Kami mengalami masalah ini setelah memutakhirkan sekuel ke versi 4.
Saya pikir, dari versi ini, fungsi logging dipanggil dengan dua argumen sql dan beberapa objek sekuel (saya tidak ingat apa objek itu sebenarnya). winston mencoba untuk mencatat setiap argumen yang dilewati sehingga ia juga mencoba membuat sekuel objek, apa yang tidak dimaksudkan untuk dicatat.
Untuk memperbaikinya, coba bungkus winston log call ke fungsi lain.