Winston: JSON์— ๋Œ€ํ•œ ์ˆœํ™˜ ๊ตฌ์กฐ: ๋กœ๊น… ์—ฐ์†ํ™”

์— ๋งŒ๋“  2017๋…„ 11์›” 05์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: winstonjs/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: 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
    }
});

๋ชจ๋“  3 ๋Œ“๊ธ€

๋‚˜๋Š” ์ด๊ฒƒ์ด ์œˆ์Šคํ„ด์ด ์•„๋‹ˆ๋ผ ์‹œํ€„๋ผ์ด์ฆˆ์™€ ๊ด€๋ จ์ด ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
์‹œํ€„๋ผ์ด์ฆˆ๋ฅผ ๋ฒ„์ „ 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 ๋•๋ถ„์— ํ•œ๋™์•ˆ ์ด๊ฒƒ์œผ๋กœ ๋จธ๋ฆฌ๋ฅผ ๊ธ์ ์˜€์Šต๋‹ˆ๋‹ค!

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰