ホームページ  >  記事  >  ウェブフロントエンド  >  Node.js サービスにログを書き込む方法を段階的に説明します。

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

青灯夜游
青灯夜游転載
2021-12-28 10:49:522656ブラウズ

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 を通じて変更できます): <pre class="brush:js;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>下の図に示すように:

只会输出级别相等或者级别高的日志。比如你配置了 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 サイトの他の関連記事を参照してください。

声明:
この記事はjuejin.cnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。