Winston: Struktur melingkar ke JSON: Sequelize logging

Dibuat pada 5 Nov 2017  ·  3Komentar  ·  Sumber: winstonjs/winston

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

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.

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

Semua 3 komentar

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!

Apakah halaman ini membantu?
0 / 5 - 0 peringkat