【日記】技術書どおりにやって上手くいかなかったwinstonを中途半端に上手くいかせた

最近、こちらの本を読んでWebアプリ開発を勉強しています。
[JavaScriptでのWeb開発 ~ Node.js + Express + MongoDB + ReactでWebアプリを開発しよう ~ その２（iOS対応版）](https://www.amazon.co.jp/JavaScript%E3%81%A7%E3%81%AEWeb%E9%96%8B%E7%99%BA-Node-js-Express-React%E3%81%A7Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E9%96%8B%E7%99%BA%E3%81%97%E3%82%88%E3%81%86-%E3%81%9D%E3%81%AE%EF%BC%92%EF%BC%88iOS%E5%AF%BE%E5%BF%9C%E7%89%88%EF%BC%89-ebook/dp/B07F3XT7DB/ref=sxbs_sxwds-stvp?pd_rd_i=B07F3XT7DB&pd_rd_r=f2e1d027-a3e3-4c96-8e12-e1afb2146b33&pd_rd_w=LD1hY&pd_rd_wg=hVfKH&pf_rd_p=e29507e3-7937-4495-82f4-55b5d5ca8047&pf_rd_r=M6V0KASPN856VE2FX3GD&qid=1559100464&refinements=p_27%3A%E3%83%8A%E3%82%AB%E3%83%8E%E3%83%92%E3%83%88%E3%82%B7&s=digital-text&text=%E3%83%8A%E3%82%AB%E3%83%8E%E3%83%92%E3%83%88%E3%82%B7)
途中、winstonというロギングアプリを導入する方法が解説されていたところで詰まりました。

本書では次のようにwinstonの設定ファイルを定義するよう書いてありました。

```lib/logger.js
var winston = require('winston')

function Logger(){
  return winston.add(winston.transports.File, (
    filename: "log/warning.log",
    maxsize: 1048576,
    level: "warn"
  });
}

module.exports = new Logger();
```

この通りにファイルを作成してアプリを起動しようとすると、次のようなエラーが発生。

```
$ node app.js
/Users/anaakikutsushita/Desktop/code/learn-nodejs/hoge/node_modules/winston-transport/legacy.js:18
    throw new Error('Invalid transport, must be an object with a log method.');
    ^

Error: Invalid transport, must be an object with a log method.
    at new LegacyTransportStream (/Users/anaakikutsushita/Desktop/code/learn-nodejs/hoge/node_modules/winston-transport/legacy.js:18:11)
    at DerivedLogger.add (/Users/anaakikutsushita/Desktop/code/learn-nodejs/hoge/node_modules/winston/lib/winston/logger.js:345:11)
    at Object.winston.<computed> [as add] (/Users/anaakikutsushita/Desktop/code/learn-nodejs/hoge/node_modules/winston/lib/winston.js:110:68)
    at new Logger (/Users/anaakikutsushita/Desktop/code/learn-nodejs/hoge/lib/logger.js:4:20)
    at Object.<anonymous> (/Users/anaakikutsushita/Desktop/code/learn-nodejs/hoge/lib/logger.js:12:18)
    at Module._compile (internal/modules/cjs/loader.js:759:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
    at Module.load (internal/modules/cjs/loader.js:628:32)
    at Function.Module._load (internal/modules/cjs/loader.js:555:12)
    at Module.require (internal/modules/cjs/loader.js:666:19)
    at require (internal/modules/cjs/helpers.js:16:16)
    at Object.<anonymous> (/Users/anaakikutsushita/Desktop/code/learn-nodejs/hoge/app.js:12:11)
    at Module._compile (internal/modules/cjs/loader.js:759:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:770:10)
    at Module.load (internal/modules/cjs/loader.js:628:32)
    at Function.Module._load (internal/modules/cjs/loader.js:555:12)
```

ググったところ、次のような解決法を見つけました。
[Invalid transport, must be an object with a log method winston mongodb logging](https://stackoverflow.com/questions/51702149/invalid-transport-must-be-an-object-with-a-log-method-winston-mongodb-logging)

これに従って、前述のfunction Logger()を次のように修正。

```lib/logger.js
function Logger(){
  return winston.add(new winston.transports.File({
    filename: "log/error.log",
    maxsize: 1048576,
    level: "error"
  }));
}
```

こうすることで正常にアプリが起動し、ログファイルも生成されるようになりました。

しかし問題はここからで、技術書にあるような詳細なログが出力されませんでした。
出力されたログはと言うと、次のようなちょっとしたもの。

```error.log
{"level":"error"}
```

この一行で全文です。
明らかに正常な動作とは思えず、しかしどこがどう間違っているのかもよくわからず、現時点ではひとまずこの問題は諦めるということで切り上げました。