Используя пример на домашней странице, я получаю следующую ошибку:
/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.
Вероятно, на домашней странице следует об этом четко упомянуть.
Прошло три месяца, и это все еще актуально.
Просто меня это тоже укусило.
Попался в ту же ловушку. Но кого это волнует ¯_ (ツ) _ / ¯
Обновление до v3:
npm i winston<strong i="6">@next</strong> --save
benwinding, спасибо ... тонна ... однако теперь с BOT Builder Framework от Microsoft (с использованием TypeScript) ... теперь выдает эту ошибку: TypeError: невозможно создать свойство 'Symbol (level)' в строке 'h'
любая помощь?
@ sanjivsingh22 Не уверен, что это такое. Но если бы я занимался отладкой.
Надеюсь, это приблизит решение.
Пойдем дальше и закроем это, так как README был обновлен, и скоро будет выпущена версия 3. Не стесняйтесь открывать новый выпуск, если возникнут новые проблемы. Спасибо!
Самый полезный комментарий
Решено: readme.md предназначен для версии 3. У меня версия 2.
На домашней странице показано использование v3, но npm по-прежнему по умолчанию v2.
Вероятно, на домашней странице следует об этом четко упомянуть.