Code:
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
});
Versionen:
winston: 3.0.0-rc1
sequelize: 4.22.2
mysql2: 1.4.2
Fehlerstapel:
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)
Lösungsalternative
Gebraucht
Rundschreiben-json
Instanz von
https://github.com/winstonjs/logform/blob/master/json.js#L13
Ich glaube, das hängt mit Sequelize zusammen und nicht mit Winston.
Dieses Problem trat nach dem Upgrade von Sequelize auf Version 4 auf.
Ich denke, ab dieser Version wird eine Protokollierungsfunktion mit zwei Argumenten sql und einem Sequelize-Objekt aufgerufen (ich kann mich nicht erinnern, was das Objekt genau war). winston versucht, jedes übergebene Argument zu protokollieren, also hat es auch versucht, das Objekt weiterzuverfolgen, was nicht protokolliert werden soll.
Um dies zu beheben, versuchen Sie, den Winston-Log-Aufruf in eine andere Funktion einzuschließen.
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
}
});
Danke @matuszeman!
Vielen Dank @matuszeman , ich habe mir eine Weile damit am Kopf gekratzt!
Hilfreichster Kommentar
Ich glaube, das hängt mit Sequelize zusammen und nicht mit Winston.
Dieses Problem trat nach dem Upgrade von Sequelize auf Version 4 auf.
Ich denke, ab dieser Version wird eine Protokollierungsfunktion mit zwei Argumenten sql und einem Sequelize-Objekt aufgerufen (ich kann mich nicht erinnern, was das Objekt genau war). winston versucht, jedes übergebene Argument zu protokollieren, also hat es auch versucht, das Objekt weiterzuverfolgen, was nicht protokolliert werden soll.
Um dies zu beheben, versuchen Sie, den Winston-Log-Aufruf in eine andere Funktion einzuschließen.