エンターテイメント!!

遊戯王好きのJavaエンジニアのブログ。バーニングソウルを会得する特訓中。

【翻訳&お試し】Implement NodeJS Logging like a Pro!

きっかけ

技術系のサイト見てて目に入ったから、試してみたくなった。
あと、個人開発しているやつでロギングどうしようか悩んでいるから

開発環境

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

作成したソース

GitHub - suzaku-tec/winston-sample