Using the example on the homepage, I get the following error:
/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 lists "winston": "^2.4.0"
console.log(winston);
Output:
{ 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] }
There does not appear to be a createLogger or format property.
The source shows createLogger is on the exports object.
Solved: The readme.md is for version 3. I have version 2.
The homepage shows v3 usage but npm still defaults to v2.
The homepage should probably mention this clearly.

It's been three months and this is still the case.
Just got bitten by this too.
Got into the same trap. But who cares ¯_(ツ)_/¯
Upgrade to v3:
npm i winston@next --save
benwinding thanks ... a ton ... however, now with BOT Builder Framework from Microsoft (using TypeScript) ... now gives this error: TypeError: Cannot create property 'Symbol(level)' on string 'h'
any help?
@sanjivsingh22 Not sure what that is. But if I were debugging.
Hopefully this will lead to closer to a solution.
Going to go ahead and close this since the README has been updated and v3 will be shipping soon. Feel free to open a new issue if any new problems arise. Thanks!
Most helpful comment
Solved: The readme.md is for version 3. I have version 2.
The homepage shows v3 usage but npm still defaults to v2.
The homepage should probably mention this clearly.