๋ด ๋ชจ๋ ๋ก๊ทธ์ ๋ก๊ทธ์ ์ถ์ฒ๋ฅผ ๋ํ๋ด๋ ์ ๋์ฌ๊ฐ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. ์ด ๋ฐฉ๋ฒ์ ๋์ผํ ํ์ผ์ ๋ํด ๋ค์ค ์ ์ก์ ์์ฑํฉ๋๋ค.
var config = require('config')
var winston = require('winston')
var loggers = {}
function getLogger(moduleName) {
if (!loggers[moduleName]) {
loggers[moduleName] = createNewLogger(moduleName)
}
return loggers[moduleName]
}
function createNewLogger(moduleName) {
var logger = new winston.Logger()
//https://github.com/winstonjs/winston/blob/master/docs/transports.md#console-transport
logger.add(winston.transports.Console,
{
colorize: true,
timestamp: true,
label: moduleName,
level: config.get('log.level')
}
)
logger.add(winston.transports.DailyRotateFile,
{
filename: config.get('log.filename'),
level: config.get('log.level')
}
)
return logger
}
module.exports = getLogger
๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ ๋ก๊ทธ๋ฅผ ๋จ์ผ ํ์ผ/์ฝ์์ ์ ์ฅํ์ง๋ง ์ ๋์ฌ๊ฐ ๋ค๋ฆ ๋๋ค. ์ด๋ค ์์ด๋์ด?
๋๋ ๋น์ ์ด ์ด๊ฒ์ ์ํ๋ค๊ณ ๋ฏฟ์ต๋๋ค : https://github.com/winstonjs/winston#working -with-multiple-loggers-in-winston
๊ฐ์ฌํฉ๋๋ค! ์ ์ ๋ณด์์ง๋ง ๊ฐ ๋ก๊ฑฐ์ ๋ํด ์ ์ก์ด ์ฌ์์ฑ๋๊ณ ์๋ค๋ ์ธ์์ ๋ฐ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์ ์ฝ๋:
function getLogger(moduleName) {
console.log('Initializing logger for: ' + moduleName)
winston.loggers.add(moduleName, {
//https://github.com/winstonjs/winston/blob/master/docs/transports.md#console-transport
Console: {
colorize: true,
timestamp: true,
label: moduleName,
level: config.get('log.level')
},
DailyRotateFile: {
filename: config.get('log.filename'),
level: config.get('log.level')
}
})
return winston.loggers.get(moduleName)
}
Error: Transport already attached: console
๋ฅผ ์ค ๊ฒ์
๋๋ค.
๋ด๊ฐ ๋ญ ์๋ชปํ๊ณ ์๋?
@indexzero๋ , ์๋ ํ์ธ์.
์ ๋ winston 3.0.0
์
๋๋ค.
์ด๊ฒ์ด ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ธ์ง ํ์คํ์ง ์์ ์ ๋ ์ด๊ฒ์ ์๋ํ์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๊ฐ ๋ก๊ทธ ๋ฉ์์ง์ ์ ๋์ฌ๋ฅผ ๋ถ์ด๊ฑฐ๋ ๋ก๊ทธ๋๋ ๋ชจ๋/๊ธฐ๋ฅ(์ผ๋ถ ๊ตฌ์กฐ์ ๊ฒฝ์ฐ)์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ ๋ก๊ทธ์ ๋ํ ๊ธฐ๋ณธ ํ๋๋ฅผ ์ฒจ๋ถํ๋ ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ ์ํฉ๋๋ค. ๋ค์์ ์ฝ๋์ ๋๋ค( ๋ฌธ์์ ์์ ์ฐธ์กฐ).
const loggers = {};
module.exports.getModuleLogger = (moduleName, methodName) => {
const categoryName = [moduleName, methodName].join(':');
if (!loggers[categoryName]) {
loggers[categoryName] = winston.loggers.add(categoryName, {
console: {
label: categoryName,
},
file: {
filename: './log/test.log',
label: categoryName,
},
});
}
return winston.loggers.get(categoryName);
};
๊ทธ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ๊ณ ๊ฐ ๋ํ๋ฉ๋๋ค.
[winston] Attempt to write logs with no transports {"message":"yolo","
level":"info"}
๋ก๊ทธ ํจ์์ ๋งค๊ฐ๋ณ์์ "label" ํ๋๊ฐ ํฌํจ๋ witch ๊ฐ์ฒด๋ฅผ ์ถ๊ฐํ์ฌ ์ด๋ฅผ ๋ฌ์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ค์ ํ์์ ๊ฒฝ์ฐ:
const imLogFormat = printf(์ ๋ณด => {
${info.timestamp} [${info.label}] ${info.level}: ${info.message}
๋ฐํ ;
});
๋ค์์ ์ํํ ์ ์์ต๋๋ค.
logger.error('๋ค์ ์ค๋ฅ๊ฐ ์์ต๋๋ค' + err, {label: "Class1"})
logger.error('๋ค์ ์ค๋ฅ๊ฐ ์์ต๋๋ค' + err, {label: "Class2"})