์ํธ:
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
๋๋ ์ด๊ฒ์ด ์์คํด์ด ์๋๋ผ ์ํ๋ผ์ด์ฆ์ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ํ๋ผ์ด์ฆ๋ฅผ ๋ฒ์ 4๋ก ์
๊ทธ๋ ์ด๋ํ ํ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ด ๋ฒ์ ์์ ๋ก๊น
ํจ์๋ ๋ ๊ฐ์ ์ธ์ sql๊ณผ ์ผ๋ถ ํ์ ๊ฐ์ฒด๋ก ํธ์ถ๋๋ค๊ณ ์๊ฐํฉ๋๋ค(๊ฐ์ฒด๊ฐ ์ ํํ ๋ฌด์์ธ์ง ๊ธฐ์ตํ ์ ์์). 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 ๋๋ถ์ ํ๋์ ์ด๊ฒ์ผ๋ก ๋จธ๋ฆฌ๋ฅผ ๊ธ์ ์์ต๋๋ค!
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋๋ ์ด๊ฒ์ด ์์คํด์ด ์๋๋ผ ์ํ๋ผ์ด์ฆ์ ๊ด๋ จ์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ํ๋ผ์ด์ฆ๋ฅผ ๋ฒ์ 4๋ก ์ ๊ทธ๋ ์ด๋ํ ํ ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ด ๋ฒ์ ์์ ๋ก๊น ํจ์๋ ๋ ๊ฐ์ ์ธ์ sql๊ณผ ์ผ๋ถ ํ์ ๊ฐ์ฒด๋ก ํธ์ถ๋๋ค๊ณ ์๊ฐํฉ๋๋ค(๊ฐ์ฒด๊ฐ ์ ํํ ๋ฌด์์ธ์ง ๊ธฐ์ตํ ์ ์์). winston์ ์ ๋ฌ๋ ๋ชจ๋ ์ธ์๋ฅผ ๊ธฐ๋กํ๋ ค๊ณ ์๋ํ๋ฏ๋ก ๊ธฐ๋ก ๋์์ด ์๋ ๊ฐ์ฒด๋ ํ์ ์กฐ์น๋ฅผ ์๋ํ์ต๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด winston ๋ก๊ทธ ํธ์ถ์ ๋ค๋ฅธ ํจ์๋ก ๋ํํ์ญ์์ค.