コードのデバッグに苦労していますか?デバッグを容易にするログ ソリューションを探していますか?さらに詳しく知りたい方は読み続けてください。
ソフトウェア開発は、要件の収集、分析、コーディング、テスト、メンテナンスといういくつかの段階を経ます。これらすべてのフェーズのうち、コーディング/開発フェーズには多くの時間と労力がかかります。ソフトウェア エンジニアは、構文エラー、論理エラー、実行時エラーに対処します。構文エラーはコンパイル時に識別され、コードがプログラミング言語の規則に従っていないために発生します。
一方、論理エラーや実行時エラーは統合開発環境 (IDE) では識別できず、デバッグや修正が困難なことがよくあります。バグの解決は時間のかかるプロセスであり、多くのデバッグが必要です。
デバッグは、書かれたコードが期待どおりに動作しない理由を理解しようとするプロセスです。間違いと、それが発生しているコード内の正確な行がわかれば、問題を解決するのは簡単です。したがって、ログはコードのデバッグに非常に役立ちます。
ロギングとは何ですか?
ロギングは、プログラムの実行中にメッセージをキャプチャする技術です。デバッグに役立つ可能性があるメッセージのみをログに記録する必要があります。したがって、いつログ ステートメントをコードに追加するかを知ることが非常に重要です。また、ログ ステートメントを区別することも同様に重要です。ロギングには、情報、警告、エラー、デバッグ、詳細など、さまざまなレベルがあります。エラーおよび警告ステートメントは例外処理に使用されます。
info ステートメントを使用してログに記録できるデータの例には、関数から返されたデータ、配列操作後の結果、API から取得したデータなどがあります。デバッグ ログと詳細ログは、エラーの詳細な説明を提供するために使用されます。
デバッグ ログは、スタック トレース、入出力パラメータなどに関する情報を提供します。「詳細」ログは、「デバッグ」ログほど詳細ではありませんが、発生したすべてのイベントのリストを提供します。ログは、コンソール、ファイル、および出力ストリームに書き込まれます。ログ管理ツールを使用すると、構造化およびフォーマットされたログを作成できます。
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」の略です。ただし、Yarn の方が高速で、パッケージを並行してインストールできるため、npm よりも推奨されます。
最高の Node.js ロガーの一部を以下に示します。
ピノ
Pino は、 Node.js アプリケーションに最適なロガーの 1 つであるライブラリです。これはオープンソースで非常に高速で、ステートメントは読みやすい JSON 形式で記録されます。 Pino ログ レベルには、デバッグ、警告、エラー、情報メッセージなどがあります。 Pino ロガー インスタンスはプロジェクトにインポートでき、console.log ステートメントを logger.info ステートメントに置き換える必要があります。
次のコマンドを使用して Pino をインストールします。
$ npm install pino
生成されるログは精巧で、JSON 形式であり、ログの行番号、ログの種類、ログが記録された時刻などが強調表示されます。Pino は、アプリケーションでのログ記録のオーバーヘッドを最小限に抑え、ログ処理中に非常に柔軟です。
Pino は、Hapi、Restify、Express などの Web フレームワークと統合できます。Pino によって生成されたログはファイルに保存することもできます。動作にはワーカー スレッドを使用し、TypeScript と互換性があります。

ウィンストン
Winston は、 柔軟性と拡張性に主な焦点を当てて、さまざまな Web フレームワークのロギングをサポートしています。複数の種類のトランスポートをサポートし、さまざまなファイルの場所にログを保存できます。トランスポートは、ログ メッセージが保存される場所です。
Http、コンソール、ファイル、ストリームなどのいくつかの組み込みトランスポートに加えて、Cloud watch や MongoDB などの他のトランスポートもサポートしています。さまざまなレベルと形式でログを記録します。ログレベルは問題の重大度を示します。
さまざまなログ レベルは次のとおりです。
{
error: 0,
warn: 1,
info: 2,
http: 3,
verbose: 4,
debug: 5,
silly: 6
}
ログ出力形式はカスタマイズ、フィルタリング、結合も可能です。ログには、タイムスタンプ、ログに関連付けられたラベル、前のログからの経過ミリ秒などに関する情報が含まれます。
Winston は例外やキャッチされなかった Promise も処理します。クエリ ランタイム ファイリング、ストリーミング ログなどの追加機能を提供します。まず、Winston をインストールする必要があります。次に、ログを保存するための Winston 構成オブジェクトとトランスポートが作成されます。 createLogger() 関数を使用してロガー オブジェクトが作成され、ログ メッセージがそれに渡されます。

ノード・バニヤン
Bunyan は、 Node.js に JSON 形式で高速にログを記録するために使用されます。ログを表示するための 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 つでもあります。指定されたレベルをログに記録し、ログ記録に依存関係のない単一のファイルを使用します。デフォルトのログレベルは「警告」です。ログ出力は、行番号とともに適切にフォーマットされています。ロギングに使用されるメソッドには、トレース、デバッグ、警告、エラー、情報などがあります。
どのような環境でも障害に強いです。 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 ヘッダー、ソルト、パスワード、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 などの他のさまざまなロガーと互換性が得られます。自動ストリームと Cabin バッファーにより、ディスクのストレージ コストが削減されます。クロスプラットフォーム互換性があり、デバッグが簡単です。
サーバー側のログ記録には、ルーティングと自動出力ログ記録用のミドルウェアを使用する必要があります。ブラウザ側のログ記録には、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 -+ | | |
// v v v v
log.info('fyi', 'I have a kitty cat: %j', myKittyCat)
ログレベルとして「Infinity」を指定すると、すべてのメッセージが抑制されます。ログ レベルとして「-Infinity」が指定されている場合、ログを表示するには、ログ メッセージを表示するオプションを有効にする必要があります。
イベントとメッセージ オブジェクトはログ記録に使用されます。プレフィックス イベントが使用されると、プレフィックス メッセージが出力されます。スタイル オブジェクトは、テキストや背景に色を追加したり、太字、斜体、下線などのフォント スタイルを追加したりするなど、ログの書式設定に使用されます。一部の npm ログ パッケージには、bloglog、npmlogger、npmdate log などがあります。
咆哮
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 があります。 「adopt」は、コンテキスト プロパティをさまざまなレベルに渡すために、node.js で使用される関数です。子関数は、ロギング中にミドルウェアでも使用できます。
最後の言葉
ロギングは、プログラムの実行中のさまざまなアクティビティやイベントを追跡する方法です。ログはコードのデバッグにおいて重要な役割を果たします。コードの可読性の向上にも役立ちます。 Node.js は、オープンソースの JavaScript ランタイム環境です。優れた Node.js ロガーには、Pino、Winston、Bunyan、Signale、Tracer、Npmlog などがあります。各タイプのロガーには、プロファイリング、フィルタリング、ストリーミング、トランスポートなどの独自の機能があります。
ロガーの中には、カラーコンソールをサポートするものや、機密情報の処理に適したものもあります。詳細でフォーマットされたログは、開発者がコードのバグを修正する際に最も役立ちます。 JSON 形式は、データをキーと値のペアの形式でログに記録するため、使いやすいため、ログ記録には一般に好まれます。
ロガーは他のアプリケーションと統合することもでき、マルチブラウザーと互換性があります。使用するロガーの種類を選択する前に、ニーズと構築しているアプリケーションを検討することを常にお勧めします。
Windows と macOS に Node.js と NPM をインストールする方法も参照してください。