きっかけ
技術系のサイト見てて目に入ったから、試してみたくなった。
あと、個人開発しているやつでロギングどうしようか悩んでいるから
開発環境
vscodeの情報そのまま
バージョン: 1.69.2 (system setup) コミット: 3b889b090b5ad5793f524b5d1d39fda662b96a2a 日付: 2022-07-18T16:12:52.460Z Electron: 18.3.5 Chromium: 100.0.4896.160 Node.js: 16.13.2 V8: 10.0.139.17-electron.0 OS: Windows_NT x64 10.0.19043
typescript
$ tsc --version Version 4.7.4
対象サイト
Implement NodeJS Logging like a Pro! - DEV Community
ざっくり言うと、node.jsで一番有名なwinstoneの紹介をしている。
お試し
適当にプロジェクト作成
$ npm init -y $ tsc --init
winstoneをインストール
$ npm i winston
サンプル実装
主な使い方としては、createLogger
でロギング用のインスタンスを作って、そのメソッドでエラーログとかを吐き出すらしい。
// logger.ts import { createLogger, format, transports } from "winston"; const logger = createLogger({ format: format.combine(format.timestamp(), format.json()), transports: [ new transports.Console(), new transports.File({ level: "error", filename: "errors.log" }), ], }); export default logger;
↑のやつがロギング用の初期化をしているだけ。
以下、サイトの説明内容をdeepLで翻訳した結果。
format -> どのような形式にするかを指定します。ここでは、JSON形式でタイムスタンプを含むログを取得するように指定しています。 transports -> ログの保存先を指定します。エラーログをerrors.log fileというファイルに保存するように定義しました。
次に、作ったロガーを利用して、実際に出力してみる。
今回は、エラーログの定義だけしているので、エラーログを出してみる。
// index.ts import logger from "./logger"; logger.error("Something went wrong");
実行
コンパイルして実行してみる。
$ npm run tsc $ node src/index.js {"level":"error","message":"Something went wrong","timestamp":"2022-08-07T15:02:34.743Z"}
コンソールログに出力があり、index.jsが置いてるフォルダに、errors.logが出力されるはず。
中身は、コンソール出力されたやつと同じ
// errors.log {"level":"error","message":"Something went wrong","timestamp":"2022-08-07T15:02:34.743Z"}
感想
とりあえず、今回は触ってみただけ。
サイトには、まだ紹介あったけど、沼る気がしてきたので、深追いはしてない。
個人開発しているやつに入れ込むときに、もっと詳しく調べる予定。
なんとなくだけど、出力場所とかモードの切り分けで、悩む気がしている。。。
参考
Implement NodeJS Logging like a Pro! - DEV Community