ロギングを改善するために試すことができる9つのNode.jsロガーライブラリ

公開: 2022-09-01

コードのデバッグに苦労していますか? デバッグを容易にするロギング ソリューションを探していますか? 詳細については、読み進めてください。

ソフトウェア開発は、要件の収集、分析、コーディング、テスト、および保守といういくつかの段階を経ます。 これらすべてのフェーズのうち、コーディング/開発フェーズには多くの時間と労力が必要です。 ソフトウェア エンジニアは、構文エラー、論理エラー、実行時エラーに対処します。 構文エラーはコンパイル時に識別され、コードがプログラミング言語の規則に従っていないために発生します。

一方、論理エラーと実行時エラーは統合開発環境 (IDE) では識別できず、多くの場合、デバッグと修正が困難です。 バグの解決は時間のかかるプロセスであり、多くのデバッグが必要です。

デバッグは、記述されたコードが期待どおりに機能しない理由を理解しようとするプロセスです。 間違いと、それが発生しているコード内の正確な行がわかれば、問題を解決するのは簡単です。 したがって、ロギングはコードのデバッグに非常に役立ちます。

ロギングとは

ロギングは、プログラムの実行中にメッセージをキャプチャする手法です。 これらのメッセージのみをログに記録する必要があるため、デバッグに役立ちます。 そのため、いつログ ステートメントをコードに追加するかを知ることは非常に重要です。 また、ログ ステートメントを区別することも同様に重要です。 ロギングには、情報、警告、エラー、デバッグ、詳細など、さまざまなレベルがあります。 エラーおよび警告ステートメントは、例外処理に使用されます。

関数から返されるデータ、配列操作後の結果、API から取得されたデータなどは、info ステートメントを使用してログに記録できるデータの例です。 デバッグおよび詳細ログは、エラーの詳細な説明を提供するために使用されます。

デバッグ ログは、スタック トレース、入出力パラメータなどに関する情報を提供します。「詳細」ログは、「デバッグ」ログほど詳細ではありませんが、発生したすべてのイベントのリストを提供します。 ログは、コンソール、ファイル、および出力ストリームに書き出されます。 ログ管理ツールは、構造化およびフォーマット化されたログに使用できます。

Node.js ロギング

Nodejs は JavaScript ランタイム環境です。 Node.js アプリケーションは非同期でノンブロッキングであり、データ集約型のリアルタイム システムで使用されます。 Node.js について詳しく学ぶ最善の方法は、Node.js のチュートリアルとそのドキュメントを参照することです。 パフォーマンスの向上、トラブルシューティング、およびエラーの追跡には、ログ記録が必要です。 Node.js へのログインは、組み込み関数 console.log を使用して行うことができます。 また、デバッグ機能は複数のパッケージと連動しており、有効に活用できます。

ミドルウェアは、リクエストとレスポンスの管理に使用されます。 ミドルウェアは、アプリケーションまたはその他の Javascript フレームワークである可能性があります。 ミドルウェアへのログインは、アプリケーションとルーターを介して行うことができます。 Node.js ロガーは、npm または yarn install コマンドを使用してロガーをインストールする必要があります。

Npm は「Node Package Manager」の略で、YARN は「Yet Another Resource Negotiator」の略です。 ただし、npm よりも Yarn の方が高速で、パッケージを並行してインストールできるため、優先されます。

最高の Node.js ロガーの一部を以下に示します。

ピノ

Pino は、Node.js アプリケーションに最適なロガーの 1 つであるライブラリーです。 これはオープンソースであり、非常に高速で、ステートメントを読みやすい JSON 形式でログに記録します。 Pino ログ レベルには、デバッグ、警告、エラー、情報メッセージなどがあります。 Pino ロガー インスタンスをプロジェクトにインポートできます。また、console.log ステートメントを logger.info ステートメントに置き換える必要があります。

YouTube ビデオ

次のコマンドを使用して Pino をインストールします。

 $ npm install pino

生成されたログは精巧で JSON 形式であり、ログの行番号、ログの種類、ログが記録された時刻などが強調表示されます。

Pino は、Hapi、Restify、Express などの Web フレームワークと統合できます。Pino によって生成されたログは、ファイルに保存することもできます。 動作には Worker スレッドを使用し、TypeScript と互換性があります。

ウィンストン

Winston は、主に柔軟性と拡張性に重点を置いて、さまざまな Web フレームワークのロギングをサポートしています。 複数の種類のトランスポートをサポートし、さまざまなファイルの場所にログを保存できます。 トランスポートは、ログ メッセージが格納される場所です。

Http、Console、File、Stream などの組み込みトランスポートに加えて、Cloud watch や MongoDB などの他のトランスポートもサポートしています。 さまざまなレベルと形式でログを記録します。 ログ レベルは、問題の重大度を示します。

YouTube ビデオ

さまざまなログ レベルを以下に示します。

 { error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6 }

ログ出力形式は、カスタマイズ、フィルタリング、および結合することもできます。 ログには、タイムスタンプ、ログに関連付けられたラベル、前のログから経過したミリ秒などに関する情報が含まれます。

Winston は、例外とキャッチされていない promise も処理します。 クエリ ランタイム ファイリング、ストリーミング ログなどの追加機能を提供します。まず、Winston をインストールする必要があります。 次に、ログを格納するために、Winston 構成オブジェクトとトランスポートが作成されます。 createLogger() 関数を使用してロガー オブジェクトが作成され、ログ メッセージが渡されます。

ノードバニヤン

Bunyan は、JSON 形式の node.js で高速にログを記録するために使用されます。 また、ログを表示するための CLI (コマンド ライン インターフェイス) ツールも提供します。 軽量で、Node.js、Browserify、WebPack、NW.js などのさまざまなランタイム環境をサポートしています。 ログの JSON 形式は、きれいな印刷機能を使用してさらに美しくなります。 ログには、致命的、エラー、警告、情報、デバッグ、トレースなどのさまざまなレベルがあります。 それぞれが数値に関連付けられています。

インスタンスに設定されたレベルより上のすべてのレベルがログに記録されます。 Bunyan ストリームは、出力が記録される場所です。 アプリケーションのサブコンポーネントは、log.child() 関数を使用してログに記録できます。 すべての子ロガーは、特定の親アプリケーションにバインドされています。 ストリーム タイプは、ファイル、回転ファイル、生データなどです。ストリームを定義するためのコード サンプルを以下に示します。

 var bunyan = require('bunyan'); var log = bunyan.createLogger({ name: "foo", streams: [ { stream: process.stderr, level: "debug" }, ... ] });

Bunyan は DTrace ログもサポートしています。 DTrace ロギングに関係するプローブには、log-trace、log-warn、log-error、log-info、log-debug、および log-fatal が含まれます。 Bunyan はシリアライザーを使用して JSON 形式でログを生成します。 シリアライザー関数は例外をスローせず、防御的です。

ログレベル

Loglevel は、Javascript アプリケーションでのログ記録に使用されます。 また、軽量でシンプルであるため、Node.js の最高のロガーの 1 つです。 指定されたレベルをログに記録し、ログに依存しない単一のファイルを使用します。 デフォルトのログ レベルは「警告」です。 ログ出力は、行番号とともに適切にフォーマットされています。 ロギングに使用されるメソッドには、trace、debug、warn、error、および info があります。

どのような環境でも障害に対して回復力があります。 getLogger() は、ロガー オブジェクトを取得するために使用されるメソッドです。 他のプラグインと組み合わせて機能を拡張することもできます。 プラグインには、loglevel-plugin-prefix、loglevel-plugin-remote、ServerSend、DEBUG などがあります。 ロギングにプレフィックス メッセージを追加するためのプラグインを以下に示します。

 var originalFactory = log.methodFactory; log.methodFactory = function (methodName, logLevel, loggerName) { var rawMethod = originalFactory(methodName, logLevel, loggerName); return function (message) { rawMethod("Newsflash: " + message); }; }; log.setLevel(log.getLevel()); // Be sure to call setLevel method in order to apply plugin

ビルドは npm run dist コマンドを使用して実行され、テストは npm test コマンドを使用して実行できます。 ログ レベルは、Webjar、Bower、および Atmosphere パッケージをサポートします。 新しい機能が追加されるたびに、Loglevel の新しいバージョンがリリースされます。

シグナル

Signale は、Javascript アプリケーション用の 19 のロガーで構成されています。 TypeScript とスコープ付きログをサポートしています。 これは、タイムスタンプ、データ、およびファイル名を記録するのに役立つタイマーで構成されています。 await、complete、fatal、fav、info などの 19 のロガーとは別に、カスタム ログを作成できます。

カスタム ログは、ロガー データで JSON オブジェクトとフィールドを定義することによって作成されます。 対話型ロガーも作成できます。 対話型ロガーが true に設定されている場合、対話型ロガーからの新しい値が古い値を上書きします。

Signale の最も優れた点は、機密情報や機密情報を除外できることです。 複数のシークレットが配列に格納されます。 addSecrets() および clearSecrets() は、配列からシークレットを追加およびクリアするために使用される関数です。 Boostnote、Docz、Shower、Taskbook、および Vant は、ロギングに Signale を使用します。 Signale から API を呼び出すための構文は次のとおりです。

 signale.<logger>(message[,message]|messageObj|errorObj)

Signaleのダウンロード数は、記事執筆時点で100万を超えています。

トレーサー

Tracer は、詳細なログ メッセージを生成するために使用されます。 ロギング メッセージは、タイムスタンプ、ファイル名、行番号、およびメソッド名で構成されます。 ヘルパー パッケージをインストールして、出力ログ形式をカスタマイズできます。 ヘルパー パッケージは、次のコマンドを使用してインストールできます。

 npm install -dev tracer

Tracer は、ファイル、ストリーム、および MongoDB トランスポートをサポートしています。 ロギングのカラー コンソールとフィルター条件をサポートします。 最初に、npm install を使用してトレーサーをインストールする必要があります。 次に、ロガー オブジェクトを作成し、コンソールの種類を選択する必要があります。 次に、さまざまなログ レベルまたはタイプをオブジェクトに指定して、さらにログを記録できます。

関数本体に存在するビジネス ロジックを使用して同期関数を定義することにより、カスタマイズされたフィルターを作成できます。 システム ロギングには、tinytim などのマイクロ テンプレートも使用できます。

Cabin.js

Cabin は、node.js アプリケーションのサーバー側およびクライアント側のロギングに使用されます。 機密情報や重要な情報のマスキングが必要な場合に使用されます。 これには、クレジット カード番号、BasicAuth ヘッダー、salt、パスワード、CSRF トークン、および銀行口座番号が含まれます。 以下のコード スニペットは、Cabin.js を使用したログ記録を示しています。

 const Cabin = require('cabin'); const cabin = new Cabin(); cabin.info('hello world'); cabin.error(new Error('oops!'));

1600 を超えるフィールド名で構成されています。 また、Bring Your Own Logger (BYOL) の原則に従います。 これにより、Axe、Pino、Bunyan、Winston などの他のさまざまなロガーと互換性があります。自動ストリームおよびキャビン バッファーにより、ディスクのストレージ コストが削減されます。 クロスプラットフォーム互換で、デバッグが容易です。

サーバー側のロギングでは、ルーティングと自動出力ロギングのためにミドルウェアを使用する必要があります。 ブラウザ側のロギングには、XHR リクエストとスクリプトが必要です。 メタデータ、つまりデータに関するデータ、スタック トレース、およびその他のエラーを表示する Ax を使用します。 SHOW_STACK と SHOW_META は、スタック トレースとメタデータを表示または非表示にするために true または false に設定されたブール変数です。

Npmlog

npmlog は、npm が使用する基本的なタイプのロガーです。 使用されるロギング メソッドには、level、record、maxRecordSize、prefixStyle、heading、stream などがあります。 また、カラーロギングもサポートしています。 さまざまなログ レベルは、ばかげた、詳細、情報、警告、http、およびエラーです。 npm ログを使用するためのサンプル コード スニペットを以下に示します。

 var log = require('npmlog') // additional stuff ---------------------------+ // message ----------+ | // prefix ----+ | | // level -+ | | | // vvvv log.info('fyi', 'I have a kitty cat: %j', myKittyCat)

ログレベルとして「Infinity」を指定すると、すべてのメッセージが抑止されます。 ログ レベルとして「-Infinity」が指定されている場合、ログを表示するには、ログ メッセージを表示するオプションを有効にする必要があります。

ロギングには、イベントとメッセージ オブジェクトが使用されます。 プレフィックス イベントが使用されると、プレフィックス メッセージが発行されます。 スタイル オブジェクトは、テキストや背景に色を追加したり、太字、斜体、下線などのフォント スタイルを追加したりするなど、ログの書式設定に使用されます。一部の npm ログ パッケージには、brolog、npmlogger、npmdate ログなどがあります。

轟音

Roarr は、初期化を必要とせず、構造化データを生成する Node.js 用のロガーです。 CLI と環境変数があります。 ブラウザ対応です。 Fastify、Fastify、Elastic Search などと統合できます。アプリケーション コードと依存コードを区別できます。 すべてのログ メッセージは、コンテキスト、メッセージ、シーケンス、時間、およびバージョンで構成されます。 さまざまなログ レベルには、トレース、デバッグ、情報、警告、エラー、致命的などがあります。 Roarr でログを記録する方法のサンプル コード スニペットは次のとおりです。

 import { ROARR, } from 'roarr'; ROARR.write = (message) => { console.log(JSON.parse(message)); };

また、エラーのシリアル化を行うことができます。つまり、エラーのあるインスタンスをオブジェクトのコンテキストと共にログに記録できます。 Node.js と Roarr に固有の環境変数には、ROARR_LOG と ROARR_STREAM があります。 「採用」は、コンテキスト プロパティをさまざまなレベルに渡すために node.js で使用される関数です。 子関数は、ロギング中にミドルウェアでも使用できます。

最後の言葉

ロギングは、プログラムの実行中にさまざまなアクティビティやイベントを追跡する方法です。 ロギングは、コードのデバッグにおいて重要な役割を果たします。 また、コードの可読性を高めるのにも役立ちます。 Node.js は、オープンソースの JavaScript ランタイム環境です。 最高の Node.js ロガーには、Pino、Winston、Bunyan、Signale、Tracer、Npmlog などがあります。各タイプのロガーには、プロファイリング、フィルタリング、ストリーミング、トランスポートなどの独自の機能があります。

色付きのコンソールをサポートするロガーもあれば、機密情報の処理に適しているロガーもあります。 詳細で書式設定されたログは、開発者がコードのバグを修正しようとするときに最も役立ちます。 JSON 形式は、データをキーと値のペアの形式でログに記録し、使いやすくするため、一般的にログ記録に好まれます。

ロガーは他のアプリケーションと統合することもでき、マルチブラウザーと互換性があります。 使用するロガーのタイプを選択する前に、構築しているニーズとアプリケーションを検討することを常にお勧めします。

Windows と macOS に Node.js と NPM をインストールする方法も参照してください。