目次
koa プロジェクトをすばやく作成します
koa-logger
koa-log4js
使用方法
レベル
categories
appenders
总结配置
总结
ホームページ ウェブフロントエンド jsチュートリアル Node.js サービスにログを書き込む方法を段階的に説明します。

Node.js サービスにログを書き込む方法を段階的に説明します。

Dec 28, 2021 am 10:49 AM
node.js 仕える

Node サービスにログを書き込む方法は?次の記事では、Node.js サービスにログを書き込む方法を実際に理解することができます。お役に立てば幸いです。

Node.js サービスにログを書き込む方法を段階的に説明します。

Node を使用してサーバーを作成する場合、最も面倒なことは位置の問題のトラブルシューティングです。Chrome ブラウザとは異なるためです。 , dev ツール に直接エラー プロンプトを表示することも、デバッグ ポイントを直接中断することもできます。

test 環境は正常であるにもかかわらず、live 環境が動作しないという問題がよく発生します。ログがなければ、この問題に関する手がかりはありません。

そこで、この記事では、Node サービスにログを書き込む方法について説明します。

koa プロジェクトをすばやく作成します

最初にグローバルにインストールされていることを確認してくださいkoa2:

npm i koa2 -g
ログイン後にコピー

次に実行します:

koa2 -e node-log # 新建一个项目
cd node-log
npm i # 安装依赖
npm run start # 启动
ログイン後にコピー

の基本サービスが設定されています。 http://localhost:3000/ にアクセスすると、次のページが表示されます:

Node.js サービスにログを書き込む方法を段階的に説明します。

上記は簡単なセットアップですkoaサービスメソッド。このプロジェクトには、組み込みのロギング ライブラリ (koa-logger) が含まれています。まずはそれが何をするのか見てみましょう。

koa-logger

このライブラリは比較的シンプルで、リクエスト メソッド、URL、時刻などのリクエストの基本情報を記録します。ミドルウェアとして使用する場合は、koa のオニオン モデルに関連するため、すべてのミドルウェアの前に配置することをお勧めします。最初の時間でない場合、計算された時間は不正確になります。

var logger = require('koa-logger');
app.use(logger());
ログイン後にコピー

応答リソースにアクセスすると、対応するログが次のようにコンソールに出力されます。

  <-- GET /
GET / - 14
  --> GET / 200 19ms 234b
  <-- GET /stylesheets/style.css
GET /stylesheets/style.css - 1
  --> GET /stylesheets/style.css 200 3ms 111b
  <-- GET /favicon.ico
GET /favicon.ico - 1
  --> GET /favicon.ico 404 1ms -
ログイン後にコピー

デフォルトでは、ログは console を介して直接出力されます。ログファイルへの書き込みなど、ログに対してカスタム操作を実行する必要がある場合は、コンソール。たとえば、時間を記録します:

app.use(logger((str) => {
  console.log(new Date() + str)
  // redirect koa logger to other output pipe
  // default is process.stdout(by console.log function)
}))
ログイン後にコピー

結果:

Mon Oct 11 2021 19:28:41 GMT+0800 (China Standard Time)  <-- GET /
GET / - 10ms
Mon Oct 11 2021 19:28:41 GMT+0800 (China Standard Time)  --> GET / 200 20ms 226b
Mon Oct 11 2021 19:28:41 GMT+0800 (China Standard Time)  <-- GET /stylesheets/style.css
Mon Oct 11 2021 19:28:41 GMT+0800 (China Standard Time)  --> GET /stylesheets/style.css 200 4ms 111b
ログイン後にコピー

koa-log4js

koa-logger これは比較的軽量で、比較的柔軟なインターフェイスを公開します。ただし、実際のビジネスで使用する場合は、koa-log4js を使用することを個人的にお勧めします。主な理由は次のとおりです。

  • koa-logger ミドルウェアの使用のみをサポートしており、特定のログをレポートする機能はサポートしていないようです。
  • 組み込み関数は比較的少ないです。例えば、丸太の分類や配置など。

koa-log4js koa ログ ミドルウェアをサポートするために log4js をラップします。その構成は log4js と一致しています。したがって、log4js を使用する場合、使用方法は一貫している必要があります。

使用方法

インストール:

npm i --save koa-log4
ログイン後にコピー

まず使用方法を見てみましょう。ルート ディレクトリに新しいフォルダー log を作成します。 。そして、新しいフォルダー utils を作成し、その中に新しいファイル logger.js を作成します。コードは次のとおりです。

const path = require(&#39;path&#39;);
const log4js = require(&#39;koa-log4&#39;);
const RUNTIME_PATH = path.resolve(__dirname, &#39;../&#39;);
const LOG_PATH = path.join(RUNTIME_PATH, &#39;log&#39;);

log4js.configure({
  // 日志的输出
  appenders: {
    access: {
      type: &#39;dateFile&#39;,
      pattern: &#39;-yyyy-MM-dd.log&#39;, //生成文件的规则
      alwaysIncludePattern: true, // 文件名始终以日期区分
      encoding: &#39;utf-8&#39;,
      filename: path.join(LOG_PATH, &#39;access.log&#39;) //生成文件名
    },
    application: {
      type: &#39;dateFile&#39;,
      pattern: &#39;-yyyy-MM-dd.log&#39;,
      alwaysIncludePattern: true,
      encoding: &#39;utf-8&#39;,
      filename: path.join(LOG_PATH, &#39;application.log&#39;)
    },
    out: {
      type: &#39;console&#39;
    }
  },
  categories: {
    default: { appenders: [ &#39;out&#39; ], level: &#39;info&#39; },
    access: { appenders: [ &#39;access&#39; ], level: &#39;info&#39; },
    application: { appenders: [ &#39;application&#39; ], level: &#39;all&#39;}
  }
});

// getLogger 传参指定的是类型
exports.accessLogger = () => log4js.koaLogger(log4js.getLogger(&#39;access&#39;)); // 记录所有访问级别的日志
exports.logger = log4js.getLogger(&#39;application&#39;);
ログイン後にコピー

簡単に説明すると、configure は ## 経由で渡される log4js-node (詳細は後で説明します) の設定です。 #getLogger 関数 パラメーターはログのタイプです。たとえば、access はアクセス レベルのログです。

次に、

const { accessLogger, logger } = require(&#39;./utils/logger&#39;);
app.use(accessLogger())
ログイン後にコピー
app.js

routes/index.js に追加します:

+ const { logger } = require(&#39;../utils/logger&#39;)

router.get(&#39;/&#39;, async (ctx, next) => {
+  logger.info(&#39;我是首页&#39;);
  await ctx.render(&#39;index&#39;, {
    title: &#39;Hello Koa 2!&#39;
  })
})
ログイン後にコピー

Refresh 、

log フォルダーに 2 つのファイルが出力されていることがわかります:

Node.js サービスにログを書き込む方法を段階的に説明します。

それぞれ記録されています:

[2021-10-12T10:43:33.914] [INFO] access - ::1 - - "GET / HTTP/1.1" 200 226 "" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36"
[2021-10-12T10:43:34.065] [INFO] access - ::1 - - "GET /stylesheets/style.css HTTP/1.1" 200 111 "http://localhost:3000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.71 Safari/537.36"
ログイン後にコピー
[2021-10-12T10:43:33.902] [INFO] application - 我是首页
ログイン後にコピー

次に見てみましょう

log4jsの設定で。

レベル

ログ分類の主な機能は、ログ (さまざまな色) をより適切に表示し、本番環境でのいくつかの# を避けるためにログを選択的に配置することです。 ##debug

がリークされました。 log4js デフォルトでは、次のように 9 つのレベルがあります (levels を通じて変更できます): <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>{ ALL: new Level(Number.MIN_VALUE, &quot;ALL&quot;), TRACE: new Level(5000, &quot;TRACE&quot;), DEBUG: new Level(10000, &quot;DEBUG&quot;), INFO: new Level(20000, &quot;INFO&quot;), WARN: new Level(30000, &quot;WARN&quot;), ERROR: new Level(40000, &quot;ERROR&quot;), FATAL: new Level(50000, &quot;FATAL&quot;), MARK: new Level(9007199254740992, &quot;MARK&quot;), // 2^53 OFF: new Level(Number.MAX_VALUE, &quot;OFF&quot;) }</pre><div class="contentsignin">ログイン後にコピー</div></div>下の図に示すように:

只会输出级别相等或者级别高的日志。比如你配置了 WARN,就不会输出 INFO 的日志。 可以在下面配置的 categories 中配置不同的类型日志的日志级别。

categories

日志类别。必须配置默认日志类别,用于没有命中的情况下的兜底行为。该配置为一个对象,key 值为分类名称。比如上述 demo 中:

{
  default: { appenders: [ &#39;out&#39; ], level: &#39;info&#39; },
  access: { appenders: [ &#39;access&#39; ], level: &#39;info&#39; },
  application: { appenders: [ &#39;application&#39; ], level: &#39;all&#39;}
}
ログイン後にコピー

其中每个类别都有两个配置 appenders 是一个字符串数组,是输出配置(后文中会详解),可以指定多个,至少要有一个。level 是上文日志级别。

appenders

解决了日志分级和分类,接下来是日志落盘,也就是输出日志的问题。对应的配置是 appenders,该配置的 key 值为自定义的名称(可以给 categories 中的 appenders 使用),属性值为一个对象,配置输出类型。如下所示:

// 日志的输出
appenders: {
  access: {
    type: &#39;dateFile&#39;,
    pattern: &#39;-yyyy-MM-dd.log&#39;, //生成文件的规则
    alwaysIncludePattern: true, // 文件名始终以日期区分
    encoding: &#39;utf-8&#39;,
    filename: path.join(LOG_PATH, &#39;access.log&#39;) //生成文件名
  },
  out: {
    type: &#39;console&#39;
  }
}
ログイン後にコピー

其中,out 指的是通过 console 输出,这个可以作为我们的一个兜底。accesstypedataFile,指的是输出文件,然后配置文件的命名和输出路径。除了这个类型,详情可以看官网,比如 SMTP 通过邮件发送(这个需要 nodemailer

总结配置

日志分级、日志分类以及日志落盘,配置上的关系如下:

Node.js サービスにログを書き込む方法を段階的に説明します。

总结

日志对于我们服务端排查定位问题非常重要,本文通过 koa-loggerkoa-log4js 讲解了如何上报日志。

koa-logger 比较轻量,记录请求的基本信息,也提供了一定的自定义能力。

koa-log4js 在日志分级、日志分类以及日志落盘上提供了一定的能力,个人认为基本这个更加适用于生产环境。

更多node相关知识,请访问:nodejs 教程!!

以上がNode.js サービスにログを書き込む方法を段階的に説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Node V8 エンジンのメモリと GC の詳細な図による説明 Node V8 エンジンのメモリと GC の詳細な図による説明 Mar 29, 2023 pm 06:02 PM

この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

Nodeのメモリ制御に関する記事 Nodeのメモリ制御に関する記事 Apr 26, 2023 pm 05:37 PM

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

Windows で「サービスが応答していません」エラーを修正する方法。 Windows で「サービスが応答していません」エラーを修正する方法。 Apr 27, 2023 am 08:16 AM

NETSTART コマンドは、サービスやその他のプログラムの開始と停止に使用できる Windows の組み込みコマンドです。このコマンドの実行中に、NetHelpmsg2186 エラーが発生する場合があります。このエラーが発生したほとんどのユーザーは、NETSTARTWUAUSERV コマンドを実行して Windows Update サービスを再起動しようとします。 Windows Update サービスが無効になっているか、実行されていない場合、最新の更新プログラムを入手できないため、システムが危険にさらされる可能性があります。このエラーが発生する理由とそれを回避する方法を詳しく見てみましょう。わかった?エラー 2186 とは何ですか? Windows Update サービスは、最新の重要な更新プログラムとセキュリティ機能をインストールします

Windows 10 セキュリティ センター サービスが無効になっている場合の解決策 Windows 10 セキュリティ センター サービスが無効になっている場合の解決策 Jul 16, 2023 pm 01:17 PM

セキュリティ センター サービスは、win10 システムに組み込まれたコンピュータ保護機能であり、コンピュータのセキュリティをリアルタイムで保護できますが、一部のユーザーは、コンピュータの起動時にセキュリティ センター サービスが無効になる状況に遭遇します。方法は非常に簡単で、サービス パネルを開いて SecurityCenter 項目を見つけ、右クリックしてそのプロパティ ウィンドウを開き、スタートアップの種類を自動に設定し、[開始] をクリックしてサービスを再度開始します。 Win10 セキュリティ センター サービスが無効になっている場合の対処方法: 1. 「Win+R」を押して「操作」ウィンドウを開きます。 2. 次に、「services.msc」コマンドを入力して Enter キーを押します。 3. 次に、右側のウィンドウで「SecurityCenter」項目を見つけ、ダブルクリックしてプロパティ ウィンドウを開きます。

Node の File モジュールについて詳しく説明しましょう Node の File モジュールについて詳しく説明しましょう Apr 24, 2023 pm 05:49 PM

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

コマンドを使用してリモート デスクトップ接続サービスを開く方法 コマンドを使用してリモート デスクトップ接続サービスを開く方法 Dec 31, 2023 am 10:38 AM

リモート デスクトップ接続は多くのユーザーの日常生活に利便性をもたらしていますが、操作がより便利なコマンドを使用してリモート接続したいと考えている人もいます。リモート デスクトップ接続サービスは、コマンドを使用して開くことでこの問題を解決できます。リモート デスクトップ接続コマンドの設定方法: 方法 1. コマンドを実行してリモート接続します。 1. 「Win+R」を押して「ファイル名を指定して実行」を開き、「mstsc2」と入力し、「オプションの表示」をクリックします。 3. IP アドレスを入力して、「クリック」をクリックします。 "接続する"。 4. 接続中であることが表示されます。方法 2: コマンド プロンプトを介してリモート接続する 1. 「Win+R」を押して「ファイル名を指定して実行」を開き、「cmd2」と入力します。「コマンド プロンプト」に「mstsc/v:192.168.1.250/console」と入力します。

認証コードではロボットを止めることはできません! Google AI はぼやけたテキストを正確に識別できますが、GPT-4 は盲目のふりをして助けを求めます 認証コードではロボットを止めることはできません! Google AI はぼやけたテキストを正確に識別できますが、GPT-4 は盲目のふりをして助けを求めます Apr 12, 2023 am 09:46 AM

「最も迷惑なのは、Web サイトにログインするときにさまざまな種類の奇妙な (または変態的な) 確認コードが表示されることです。」 さて、良いニュースと悪いニュースがあります。良いニュースは、AI がこれを行ってくれるということです。私の言うことが信じられないかもしれませんが、認識の困難さが増大する 3 つの実際のケースを以下に示します。 そして、これらは「Pix2Struct」と呼ばれるモデルによって得られる答えです。 これらはすべて正確で、一字一句正確ですか?一部のネチズンは「確かに、精度は私よりも優れています。」と嘆いています。では、それをブラウザのプラグインにすることはできるのでしょうか? ?はい、一部の人は次のように言いました。これらのケースは比較的単純ですが、微調整するだけで、その効果がどれほど強力になるかは想像できません。悪い知らせは、検証コードでは間もなくロボットを停止できなくなるということです。 (危ない危ない…)どうやってやるの? Pix2St

Linux でサービスを再起動する正しい方法は何ですか? Linux でサービスを再起動する正しい方法は何ですか? Mar 15, 2024 am 09:09 AM

Linux でサービスを再起動する正しい方法は何ですか? Linux システムを使用していると、特定のサービスを再起動する必要がある状況がよく発生しますが、サービスの再起動時に実際にサービスが停止しない、または開始しないなどの問題が発生することがあります。したがって、サービスを再起動する正しい方法を習得することが非常に重要です。 Linux では、通常、systemctl コマンドを使用してシステム サービスを管理できます。 systemctl コマンドは systemd システム マネージャーの一部です

See all articles