рдореБрдЦрдкреГрд╖реНрда рдкрд░ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдореБрдЭреЗ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ:
/Users/owner/path/log.js:7
format: winston.format.json(),
^
TypeError: Cannot read property 'json' of undefined
at Object.setupLogging (/Users/owner/path/log.js:7:27)
at Object.<anonymous> (/Users/owner/path/server.js:35:8)
at Module._compile (module.js:573:30)
at Object.Module._extensions..js (module.js:584:10)
at Module.load (module.js:507:32)
at tryModuleLoad (module.js:470:12)
at Function.Module._load (module.js:462:3)
at Function.Module.runMain (module.js:609:10)
at startup (bootstrap_node.js:158:16)
at bootstrap_node.js:578:3
const winston = require('winston');
function setupLogging(app) {
const logger = winston.createLogger({
level: 'info',
format: winston.format.json(),
transports: [
//
// - Write to all logs with level `info` and below to `combined.log`
// - Write all logs error (and below) to `error.log`.
//
new winston.transports.File({ filename: 'error.log', level: 'error' }),
new winston.transports.File({ filename: 'combined.log' }),
],
});
//
// If we're not in production then log to the `console` with the format:
// `${info.level}: ${info.message} JSON.stringify({ ...rest }) `
//
if (process.env.NODE_ENV !== 'production') {
logger.add(new winston.transports.Console({
format: winston.format.simple(),
colorize: true,
}));
}
}
module.exports = {
setupLogging,
};
package.json
рд╕реВрдЪреА "winston": "^2.4.0"
console.log(winston);
рдЖрдЙрдЯрдкреБрдЯ:
{ version: '2.4.0',
transports:
{ Console: [Getter],
File: [Getter],
Http: [Getter],
Memory: [Getter] },
hash: [Function],
clone: [Function],
longestElement: [Function],
exception:
{ getAllInfo: [Function],
getProcessInfo: [Function],
getOsInfo: [Function],
getTrace: [Function] },
config:
{ allColors:
{ ... },
addColors: [Function],
colorize: [Function],
cli: { levels: [Object], colors: [Object] },
npm: { levels: [Object], colors: [Object] },
syslog: { levels: [Object], colors: [Object] } },
addColors: [Function],
Container: [Function],
Logger:
{ [Function]
super_:
{ [Function: EventEmitter]
EventEmitter: [Circular],
usingDomains: false,
defaultMaxListeners: [Getter/Setter],
init: [Function],
listenerCount: [Function] } },
Transport:
{ [Function]
super_:
{ [Function: EventEmitter]
EventEmitter: [Circular],
usingDomains: false,
defaultMaxListeners: [Getter/Setter],
init: [Function],
listenerCount: [Function] } },
loggers: { loggers: {}, options: {}, default: { transports: [Array] } },
levels: { error: 0, warn: 1, info: 2, verbose: 3, debug: 4, silly: 5 },
error: [Function],
warn: [Function],
info: [Function],
verbose: [Function],
debug: [Function],
silly: [Function],
log: [Function],
query: [Function],
stream: [Function],
add: [Function],
remove: [Function],
clear: [Function],
profile: [Function],
startTimer: [Function],
extend: [Function],
cli: [Function],
handleExceptions: [Function],
unhandleExceptions: [Function],
configure: [Function],
setLevels: [Function] }
createLogger
рдпрд╛ format
рд╕рдВрдкрддреНрддрд┐ рдкреНрд░рддреАрдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
рд╕реНрд░реЛрдд рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ createLogger рдирд┐рд░реНрдпрд╛рдд рд╡рд╕реНрддреБ рдкрд░ рд╣реИред
рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛: readme.md рд╕рдВрд╕реНрдХрд░рдг 3 рдХреЗ рд▓рд┐рдП рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг 2 рд╣реИред
рдореБрдЦрдкреГрд╖реНрда v3 рдЙрдкрдпреЛрдЧ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди npm рдЕрднреА рднреА v2 рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред
рдореБрдЦрдкреГрд╖реНрда рдХреЛ рд╢рд╛рдпрдж рдЗрд╕рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рддреАрди рдорд╣реАрдиреЗ рд╣реЛ рдЧрдП рд╣реИрдВ рдФрд░ рдЕрднреА рднреА рдпрд╣реА рд╕реНрдерд┐рддрд┐ рд╣реИред
рдмрд╕ рдЗрд╕реА рд╕реЗ рдЪреБрдн рдЧрдпрд╛ред
рдкреАрдЖрд░ рджреЗрдЦреЗрдВ: https://github.com/winstonjs/winston/pull/1198
рдЙрд╕реА рдЬрд╛рд▓ рдореЗрдВ рдлрдВрд╕ рдЧрдПред рд▓реЗрдХрд┐рди рдХреМрди рдкрд░рд╡рд╛рд╣ рдХрд░рддрд╛ рд╣реИ _(уГД)_/┬п
v3 рдореЗрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░реЗрдВ:
npm i winston<strong i="6">@next</strong> --save
рдзрдиреНрдпрд╡рд╛рдж ... рдПрдХ рдЯрди ... рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЕрдм рдорд╛рдЗрдХреНрд░реЛрд╕реЙрдлреНрдЯ рд╕реЗ рдмреАрдУрдЯреА рдмрд┐рд▓реНрдбрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде (рдЯрд╛рдЗрдкрд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ) ... рдЕрдм рдпрд╣ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ: рд▓реЗрдЦрди рддреНрд░реБрдЯрд┐: рд╕реНрдЯреНрд░рд┐рдВрдЧ 'рдПрдЪ' рдкрд░ рд╕рдВрдкрддреНрддрд┐ 'рдкреНрд░рддреАрдХ (рд╕реНрддрд░)' рдирд╣реАрдВ рдмрдирд╛ рд╕рдХрддрд╛
рдХреЛрдИ рдорджрдж?
@ sanjivsingh22 рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╡рд╣ рдХреНрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдореИрдВ рдбрд┐рдмрдЧрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛ред
рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рд╕рдорд╛рдзрд╛рди рдХреЗ рдХрд░реАрдм рдкрд╣реБрдВрдЪ рдЬрд╛рдПрдЧрд╛ред
рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░ рджреЗрдВрдЧреЗ рдХреНрдпреЛрдВрдХрд┐ README рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ v3 рдХреЛ рдЬрд▓реНрдж рд╣реА рд╢рд┐рдкрд┐рдВрдЧ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдХреЛрдИ рдирдИ рд╕рдорд╕реНрдпрд╛ рдЖрддреА рд╣реИ рддреЛ рдмреЗрдЭрд┐рдЭрдХ рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВред рдзрдиреНрдпрд╡рд╛рдж!
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛: readme.md рд╕рдВрд╕реНрдХрд░рдг 3 рдХреЗ рд▓рд┐рдП рд╣реИред рдореЗрд░реЗ рдкрд╛рд╕ рд╕рдВрд╕реНрдХрд░рдг 2 рд╣реИред
рдореБрдЦрдкреГрд╖реНрда v3 рдЙрдкрдпреЛрдЧ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди npm рдЕрднреА рднреА v2 рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реИред
рдореБрдЦрдкреГрд╖реНрда рдХреЛ рд╢рд╛рдпрдж рдЗрд╕рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред