рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореЗрд░реЗ рд╕рднреА рд▓реЙрдЧ рдореЗрдВ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рд╣реЛ рдЬреЛ рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реЛ рдХрд┐ рд▓реЙрдЧ рдХрд╣рд╛рдВ рд╕реЗ рдЖрдпрд╛ рд╣реИред рдЗрд╕ рддрд░рд╣ рдПрдХ рд╣реА рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдХрдИ рдкрд░рд┐рд╡рд╣рди рдмрдирд╛рддрд╛ рд╣реИ, рдЬреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╣реИ
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 ,
рдореИрдВ рд╡рд┐рдВрд╕реНрдЯрди 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"}
рдЖрдк рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рд╡рд┐рдЪ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рд▓реЙрдЧ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдлрд╝реАрд▓реНрдб "рд▓реЗрдмрд▓" рд╢рд╛рдорд┐рд▓ рд╣реИ, рдЙрджрд╛рд╣рд░рдг:
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП:
рдХрд╛рд╕реНрдЯ imLogFormat = рдкреНрд░рд┐рдВрдЯрдл (рдЬрд╛рдирдХрд╛рд░реА => {
рд╡рд╛рдкрд╕реА ${info.timestamp} [${info.label}] ${info.level}: ${info.message}
;
});
рдЖрдк рдирд┐рдореНрди рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
logger.error('рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рд╣реИ' + рддреНрд░реБрдЯрд┐, {рд▓реЗрдмрд▓: "рдХрдХреНрд╖рд╛ 1"})
logger.error('рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рд╣реИ' + рддреНрд░реБрдЯрд┐, {рд▓реЗрдмрд▓: "рдХрдХреНрд╖рд╛ 2"})