Winston: Zirkuläre Struktur zu JSON: Sequelize-Logging

Erstellt am 5. Nov. 2017  ·  3Kommentare  ·  Quelle: winstonjs/winston

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

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.

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
    }
});

Alle 3 Kommentare

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!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen