この記事では、Node.js の「デバッグ」モジュールを使用してアプリケーション ログのログ汚染を回避する方法を紹介します。一定の参考値があるので、困っている友達が参考になれば幸いです。
ビデオ チュートリアルの推奨: nodejs チュートリアル
このような経験をしたことがありますか?記録してください。カスタム Node モジュールに追加し、追加情報があればメリットがあるだろうと考えましたが、そのモジュールを依存関係として追加して npm install
と npm start
を実行すると、プログラムがログは次のようになりますか?
#実際に必要な情報はどうやって見つけますか?アプリケーションの依存関係からの情報ではなく、誰がいつログインしたかなど:
同様に、チームがいつログインしたかを疑う場合は、ノード モジュールの依存関係がパフォーマンスの低下を引き起こしました。対処する必要があったのは次のログのみです:
全体像を見ると、これがログ汚染の内容です。
何が欲しいのか
理想的なログ ソリューションでは、モジュール ログがプログラムやサービスのログに記録されないようにする必要がありますが、必要に応じてトラブルシューティングのために開きます。
これを行うには、debug モジュールを使用して Node モジュールでログをオンまたはオフにする方法を説明します。
これらが必要なく、このモジュールを使用するサービスが正常に動作する場合は、OFF に設定してください。
ON 問題が発生し、できるだけ多くのログ情報が必要な場合に使用されます。
debug
モジュールの概要
機能の観点からは、通常デバッガーでモジュールをデバッグすることを考えないでください (ブレークポイントを設定する方法など)。 IDE も同様に)、修正された console
モジュールに似たものになるはずです。これは、必要に応じてログのオンとオフを切り替えることができるツールです。 GitHub ページ (https://github.com/visionmedi...) にアクセスすると、名前空間などの他のさまざまな機能も表示されます。現時点ではそれを無視してください。これは運用環境を最適化できるツールであることだけを知っておいてください。
独自の Node モジュールに debug を実装する
コード内で debug
を使用する例を見てみましょう。以下がモジュールであると仮定します。
const debug = require('debug'); const log = debug('http:server'); const http = require('http'); const name = 'Demo App for debug module'; log('booting %o', name); http.createServer((req, res) => { log(req.method + ' ' + req.url); res.end('debug example\n'); }).listen(3200, () => { log('listening'); });
debug
の実装は簡単です。必要なのは、モジュールをインポートまたは要求して、ロガーを作成することだけです ( const log = debug('http:server');
)。デバッグを有効にするには、特定のロガーのタグまたは名前空間「http:server」を DEBUG
環境変数に渡すだけです。
アプリケーション (つまり、モジュールをインポートしたプログラム) を開始するときは、次のように開始します。
DEBUG=http:server node app-entrypoint.js
If特定のログを切り替えるために別のロガーを使用する場合はどうすればよいですか?たとえば、エラーのみに切り替えたい場合はどうすればよいでしょうか?次のように別のロガーを作成するのと同じくらい簡単です:
const debug = require('debug'); const log = debug('http:server'); const errorLogger = debug('http:error'); // create new logger here, passing it a new namespace const http = require('http'); const name = 'Demo App for debug module'; log('booting %o', name); http.createServer((req, res) => { log(req.method + ' ' + req.url); res.end('hello\n'); // fake an error to demonstrate using debug for http:error namespace setTimeout(() => { errorLogger('fake error'); // then call the logger }, 1000); }).listen(3200, () => { log('listening'); });
以下はエラーのみを開きます:
#
DEBUG=http:error node app-entrypoint.js
而且,当你要记录所有命名空间的日志时(在这种情况下,是 http:server
和 http:error
),只需传递通配符 *
即可。
DEBUG=http:* node app-entrypoint.js
让我们看看这些日志现在是什么样的:
然后,当我们加载页面时:
注意,debug
会写入 stderr
而不是 stdout
,所以如果你有一个根据不同的来源提取日志的日志路由,这些调试日志将最终会存储在 stderr 流中。
最后,你还可以选择:
- 你可以记录所有用
debug
编写的模块的日志。 - 或者,你仍然可以用
console.log()
/console.error()
记录某些内容,而另一些记录debug
如果你有必须要记录的事项,并且与使用该模块的应用程序有关,请用 console
将其记录下来。但是如果你不这样做,就会用 debug
记录所有的内容。
为第三方模块打开 debug
到目前为止,如果你(或你的团队)编写了该模块,那么我们所介绍的内容就很棒。
但是如果你用的是第三方模块,那需要打开调试时该怎么办?
也许你已经对程序的各个部分进行了故障排除,不够现在假设你正在使用的开源模块可能会让你遇到问题。
好消息是,debug
是一个使用非常广泛的模块,npm 中的许多模块可能都在用它。第三方模块的创建者知道(至少,应该知道)该模块的用户真的不希望默认情况下进行记录,因为所有其他的日志都可能会变得杂乱无章。
由于 Express 内部使用了 debug 模块,所以如果你用了 Express 并需要对其进行故障排除,则可以通过运行以下命令打开日志:
DEBUG=express:* node your-app-entrypoint.js
查看开源 node 模块是否使用了 debug
以及是如何使用的
如果在文档中没有看到关于是否使用了 debug
的内容该怎么办? 即便如此,也有可能使用了该模块,但是你必须进行一些挖掘。
我们已经知道 Express 文档中描述了该如何使用它,但是我们假设它并没有记录在案:
首先,你可以在项目的 GitHub(或其他开放源代码网站)上搜索 package.json
,然后查找其中列出的作为依赖项的模块:
确认后,你还需要确认 1)实际正在使用中,以及 2)切换需要使用哪些标志。 GitHub 现在具有一项不错的功能,你可以在其中使用搜索栏搜索项目本身。如果我们在 Express 项目中搜索“debug”,则会发现以下内容:
我们可以看到切换标记为 “express”,因此 express:*
将为我们提供所有的日志,express:view
将为我们提供视图的日志,等等。
总结
希望你看到在 node 模块中实现 debug
并为第三方模块打开它是多么容易,以及它可以怎样帮你清理日志,同时又为你提供了一种方便的方法来将其重新打开进行故障排除。
英文原文地址:https://www.coreycleary.me/using-the-debug-module-to-avoid-polluting-your-application-logs-with-logs-from-node-modules/
作者:Corey Cleary
更多编程相关知识,可访问:编程入门!!
以上がNode.js の「デバッグ」モジュールを使用してアプリケーション ログのログ汚染を回避するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

C/CからJavaScriptへのシフトには、動的なタイピング、ゴミ収集、非同期プログラミングへの適応が必要です。 1)C/Cは、手動メモリ管理を必要とする静的に型付けられた言語であり、JavaScriptは動的に型付けされ、ごみ収集が自動的に処理されます。 2)C/Cはマシンコードにコンパイルする必要がありますが、JavaScriptは解釈言語です。 3)JavaScriptは、閉鎖、プロトタイプチェーン、約束などの概念を導入します。これにより、柔軟性と非同期プログラミング機能が向上します。

さまざまなJavaScriptエンジンは、各エンジンの実装原則と最適化戦略が異なるため、JavaScriptコードを解析および実行するときに異なる効果をもたらします。 1。語彙分析:ソースコードを語彙ユニットに変換します。 2。文法分析:抽象的な構文ツリーを生成します。 3。最適化とコンパイル:JITコンパイラを介してマシンコードを生成します。 4。実行:マシンコードを実行します。 V8エンジンはインスタントコンピレーションと非表示クラスを通じて最適化され、Spidermonkeyはタイプ推論システムを使用して、同じコードで異なるパフォーマンスパフォーマンスをもたらします。

現実世界におけるJavaScriptのアプリケーションには、サーバー側のプログラミング、モバイルアプリケーション開発、モノのインターネット制御が含まれます。 2。モバイルアプリケーションの開発は、ReactNativeを通じて実行され、クロスプラットフォームの展開をサポートします。 3.ハードウェアの相互作用に適したJohnny-Fiveライブラリを介したIoTデバイス制御に使用されます。

私はあなたの日常的な技術ツールを使用して機能的なマルチテナントSaaSアプリケーション(EDTECHアプリ)を作成しましたが、あなたは同じことをすることができます。 まず、マルチテナントSaaSアプリケーションとは何ですか? マルチテナントSaaSアプリケーションを使用すると、Singの複数の顧客にサービスを提供できます

この記事では、許可によって保護されたバックエンドとのフロントエンド統合を示し、next.jsを使用して機能的なedtech SaaSアプリケーションを構築します。 FrontEndはユーザーのアクセス許可を取得してUIの可視性を制御し、APIリクエストがロールベースに付着することを保証します

JavaScriptは、現代のWeb開発のコア言語であり、その多様性と柔軟性に広く使用されています。 1)フロントエンド開発:DOM操作と最新のフレームワーク(React、Vue.JS、Angularなど)を通じて、動的なWebページとシングルページアプリケーションを構築します。 2)サーバー側の開発:node.jsは、非ブロッキングI/Oモデルを使用して、高い並行性とリアルタイムアプリケーションを処理します。 3)モバイルおよびデスクトップアプリケーション開発:クロスプラットフォーム開発は、反応および電子を通じて実現され、開発効率を向上させます。

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン
