Table des matières
快速新建一个 koa 项目
koa-logger
koa-log4js
使用
level
Créez rapidement un projet koa
Utilisation
categories
appenders
总结配置
总结
Maison interface Web js tutoriel Apprenez étape par étape à écrire des journaux dans le service Node.js

Apprenez étape par étape à écrire des journaux dans le service Node.js

Dec 28, 2021 am 10:49 AM
node.js 服务

Comment écrire des journaux dans le service Node ? L'article suivant vous donnera une compréhension pratique de la façon d'écrire des journaux dans le service Node.js J'espère qu'il vous sera utile !

Apprenez étape par étape à écrire des journaux dans le service Node.js

Lorsque vous utilisez Node pour écrire sur le serveur, le plus gênant est de résoudre les problèmes de positionnement, car contrairement au navigateur Chrome, nous avons des invites d'erreur directes dans outil de développement, ou nous pouvons directement interrompre le débogage des points. Node 写服务端的时候,比较头疼的是排查定位问题,因为不像 Chrome 浏览器中,我们有直接的报错提示在 dev tool 中,或者我们可以直接打断点调试。

经常我们会遇到在明明我在 test 环境可以啊,为什么 live 环境不行的问题。假如没有日志,对于这种问题,根据毫无头绪。

所以这篇文章,我们来聊聊如何在 Node 服务中写日志。

快速新建一个 koa 项目

先保证你全局安装了 koa2

npm i koa2 -g
Copier après la connexion

然后执行:

koa2 -e node-log # 新建一个项目
cd node-log
npm i # 安装依赖
npm run start # 启动
Copier après la connexion

基础的服务就搭建起来了。访问 http://localhost:3000/,就可以看到以下的页面:

Apprenez étape par étape à écrire des journaux dans le service Node.js

以上是一个快速搭建 koa 服务的方法。这个项目中内置了一个写日志的库——koa-logger。我们先来看看它做了什么东西吧。

koa-logger

这个库比较简单,记录请求的基本信息,比如请求的方法、URl、用时等。作为中间件中使用,注意:推荐放在所有的中间件之前,这个跟 koa 的洋葱模型有关。假如不是第一个,计算时间会不准确。

var logger = require('koa-logger');
app.use(logger());
Copier après la connexion

在我们访问响应的资源的时候,会在控制台输出相应的日志如下:

  <-- 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 -
Copier après la connexion

默认情况下,日志是通过 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)
}))
Copier après la connexion

结果:

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
Copier après la connexion

koa-log4js

koa-logger 比较轻量,也暴露了相对灵活的接口。但在实际业务中使用,我个人推荐使用 koa-log4js。主要理由如下:

  • koa-logger 看起来只支持中间件的使用方式,而不支持上报特定日志的功能。
  • 内置的功能比较少。比如日志的分类和落盘等。

koa-log4jslog4js 做了一层包装,从而支持 Koa 日志的中间件。它的配置和 log4js 是保持一致的。所以假如你用 log4js 的话,使用上应该是一致的。

使用

安装:

npm i --save koa-log4
Copier après la connexion

先来看使用,根目录新建一个文件夹 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;);
Copier après la connexion

简单解释一下,configurelog4js-node 的配置(后文会详解),通过 getLogger 函数传参为日志类型,比如 access 是访问级别日志。

然后在 app.js 中加入:

const { accessLogger, logger } = require(&#39;./utils/logger&#39;);
app.use(accessLogger())
Copier après la connexion

以及 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;
  })
})
Copier après la connexion

刷新,可以看到在 log 文件夹中输出两个文件:

Apprenez étape par étape à écrire des journaux dans le service 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"
Copier après la connexion
[2021-10-12T10:43:33.902] [INFO] application - 我是首页
Copier après la connexion

接下来我们来看看 log4js 的配置。

level

日志的分级,主要作用是更好的展示日志(不同颜色)、有选择的落盘日志,比如在生产中避免一些 debug 的敏感日志被泄露。log4js 默认有九个分级(你可以通过 levels

Nous rencontrons souvent le problème de savoir pourquoi l'environnement live ne fonctionne pas même s'il fonctionne correctement dans l'environnement test. S'il n'y a pas de journaux, il n'y a aucune idée de ce problème.

Donc, dans cet article, parlons de la façon d'écrire des journaux dans le service

NodeApprenez étape par étape à écrire des journaux dans le service Node.js.

Créez rapidement un projet koa

🎜Assurez-vous d'abord d'avoir installé koa2 globalement : 🎜
{
  ALL: new Level(Number.MIN_VALUE, "ALL"),
  TRACE: new Level(5000, "TRACE"),
  DEBUG: new Level(10000, "DEBUG"),
  INFO: new Level(20000, "INFO"),
  WARN: new Level(30000, "WARN"),
  ERROR: new Level(40000, "ERROR"),
  FATAL: new Level(50000, "FATAL"),
  MARK: new Level(9007199254740992, "MARK"), // 2^53
  OFF: new Level(Number.MAX_VALUE, "OFF")
}
Copier après la connexion
🎜Ensuite exécuter :🎜
{
  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;}
}
Copier après la connexion
Copier après la connexion
🎜Les services de base ont été mis en place. Visitez http://localhost:3000/ et vous verrez la page suivante : 🎜🎜Apprenez étape par étape à écrire des journaux dans le service Node.js🎜🎜Ce qui précède est un moyen rapide de créer un service koa. Ce projet dispose d'une bibliothèque de journalisation intégrée - koa-logger. Voyons d'abord ce qu'il fait. 🎜

koa-logger

🎜Cette bibliothèque est relativement simple et enregistre les informations de base de la requête, telles que la méthode de requête, l'URL, le temps, etc Lorsqu'il est utilisé comme middleware, remarque : Il est recommandé de le placer avant tout middleware. Ceci est lié au modèle oignon de koa. Si ce n’est pas le premier, le temps calculé sera inexact. 🎜
// 日志的输出
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;
  }
}
Copier après la connexion
Copier après la connexion
🎜Lorsque nous accédons aux ressources de réponse, le journal correspondant sera affiché sur la console comme suit : 🎜rrreee🎜Par défaut, le journal est affiché directement sur la console via console. doivent être effectués sur le journal, comme l'écriture dans un fichier journal, etc. Cela peut être fait par quelque chose comme, par exemple, j'enregistre l'heure : 🎜rrreee🎜Le résultat : 🎜rrreee

koa-log4js

🎜koa-logger est relativement léger et expose une interface relativement flexible. Mais pour une utilisation professionnelle réelle, je recommande personnellement d'utiliser koa-log4js. Les principales raisons sont les suivantes : 🎜
  • koa-logger semble prendre en charge uniquement l'utilisation de middleware, mais ne prend pas en charge la fonction de rapport de journaux spécifiques.
  • Il existe relativement peu de fonctions intégrées. Par exemple, la classification et le placement des journaux, etc.
🎜koa-log4js🎜 Droitlog4js🎜 a créé une couche d'empaquetage pour prendre en charge le middleware de journalisation Koa. Sa configuration est cohérente avec log4js. Donc, si vous utilisez log4js, l'utilisation doit être cohérente. 🎜

Utilisation

🎜Installation : 🎜rrreee🎜Regardons d'abord l'utilisation, créez un nouveau dossier log dans le répertoire racine . Et créez un nouveau dossier utils et créez-y un nouveau fichier logger.js. Le code est le suivant : 🎜rrreee🎜Une brève explication, configure est la configuration de log4js-node (sera expliqué en détail plus tard), et les paramètres sont transmis via le Fonction getLogger C'est un type de journal, par exemple, access est un journal de niveau d'accès. 🎜🎜Ensuite, ajoutez : 🎜rrreee🎜 à app.js et ajoutez : 🎜rrreee🎜 à routes/index.js Actualisez, vous pouvez voir le log< Sortie deux fichiers dans le dossier /code> : 🎜🎜<img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/image/459/158/929/1640659356431805.png" class="lazy" title="1640659356431805.png" alt =" Apprenez étape par étape à écrire des journaux dans le service Node.js"/>🎜🎜 enregistré respectivement : 🎜rrreeerrreee🎜 Ensuite, jetons un œil à la configuration de <code>log4js. 🎜

level

🎜La fonction principale de la classification des journaux est de mieux afficher les journaux (différentes couleurs) et de les placer de manière sélective, par exemple. empêcher certains journaux sensibles au debug d'être divulgués en production. log4js a neuf niveaux par défaut (vous pouvez le modifier via levels), comme suit : 🎜rrreee🎜Comme le montre la figure ci-dessous : 🎜🎜🎜🎜

只会输出级别相等或者级别高的日志。比如你配置了 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;}
}
Copier après la connexion
Copier après la connexion

其中每个类别都有两个配置 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;
  }
}
Copier après la connexion
Copier après la connexion

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

总结配置

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

Apprenez étape par étape à écrire des journaux dans le service Node.js

总结

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

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

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

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Un article pour parler du contrôle de la mémoire dans Node Un article pour parler du contrôle de la mémoire dans Node Apr 26, 2023 pm 05:37 PM

Le service Node construit sur une base non bloquante et piloté par les événements présente l'avantage d'une faible consommation de mémoire et est très adapté à la gestion de requêtes réseau massives. Dans le contexte de demandes massives, les questions liées au « contrôle de la mémoire » doivent être prises en compte. 1. Le mécanisme de récupération de place du V8 et les limitations de mémoire Js sont contrôlés par la machine de récupération de place

Explication graphique détaillée de la mémoire et du GC du moteur Node V8 Explication graphique détaillée de la mémoire et du GC du moteur Node V8 Mar 29, 2023 pm 06:02 PM

Cet article vous donnera une compréhension approfondie de la mémoire et du garbage collector (GC) du moteur NodeJS V8. J'espère qu'il vous sera utile !

Comment corriger l'erreur « Le service ne répond pas » dans Windows. Comment corriger l'erreur « Le service ne répond pas » dans Windows. Apr 27, 2023 am 08:16 AM

La commande NETSTART est une commande intégrée à Windows qui peut être utilisée pour démarrer et arrêter des services et d'autres programmes. Parfois, vous pouvez rencontrer une erreur NetHelpmsg2186 lors de l'exécution de cette commande. La plupart des utilisateurs rencontrant cette erreur tentent de redémarrer le service Windows Update en exécutant la commande NETSTARTWUAUSERV. Si le service Windows Update est désactivé ou ne fonctionne pas, votre système peut être en danger car vous ne pourrez pas obtenir les dernières mises à jour. Explorons en détail pourquoi cette erreur se produit et comment la contourner. D'accord? Qu'est-ce que l'erreur 2186 ? Le service Windows Update installe les dernières mises à jour critiques et fonctionnalités de sécurité

Solution au service Windows 10 Security Center désactivé Solution au service Windows 10 Security Center désactivé Jul 16, 2023 pm 01:17 PM

Le service Security Center est une fonction de protection informatique intégrée au système Win10, qui peut protéger la sécurité de l'ordinateur en temps réel. Cependant, certains utilisateurs rencontrent une situation dans laquelle le service Security Center est désactivé lors du démarrage de l'ordinateur. C'est très simple. Vous pouvez ouvrir le panneau de service, rechercher l'élément SecurityCenter, puis cliquer avec le bouton droit pour ouvrir sa fenêtre de propriétés, définir le type de démarrage sur automatique, puis cliquer sur Démarrer pour redémarrer le service. Que faire si le service Win10 Security Center est désactivé : 1. Appuyez sur "Win+R" pour ouvrir la fenêtre "Opération". 2. Entrez ensuite la commande "services.msc" et appuyez sur Entrée. 3. Recherchez ensuite l'élément "SecurityCenter" dans la fenêtre de droite et double-cliquez dessus pour ouvrir sa fenêtre de propriétés.

Parlons en profondeur du module File dans Node Parlons en profondeur du module File dans Node Apr 24, 2023 pm 05:49 PM

Le module de fichiers est une encapsulation des opérations de fichiers sous-jacentes, telles que l'ajout de lecture/écriture/ouverture/fermeture/suppression de fichiers, etc. La plus grande caractéristique du module de fichiers est que toutes les méthodes fournissent deux versions de **synchrone** et ** asynchrone**, with Les méthodes avec le suffixe sync sont toutes des méthodes de synchronisation, et celles qui n'en ont pas sont toutes des méthodes hétérogènes.

Comment ouvrir le service de connexion Bureau à distance à l'aide de la commande Comment ouvrir le service de connexion Bureau à distance à l'aide de la commande Dec 31, 2023 am 10:38 AM

La connexion au bureau à distance a apporté de la commodité à la vie quotidienne de nombreux utilisateurs. Certaines personnes souhaitent utiliser des commandes pour se connecter à distance, ce qui est plus pratique à utiliser. Alors, comment se connecter ? Le service de connexion Bureau à distance peut vous aider à résoudre ce problème en utilisant une commande pour l'ouvrir. Comment configurer la commande de connexion au bureau à distance : Méthode 1. Connectez-vous à distance en exécutant la commande 1. Appuyez sur "Win+R" pour ouvrir "Exécuter" et entrez mstsc2, puis cliquez sur "Afficher les options" 3. Entrez l'adresse IP et cliquez sur "Connecter". 4. Cela montrera qu’il est en train de se connecter. Méthode 2 : Connectez-vous à distance via l'invite de commande 1. Appuyez sur « Win+R » pour ouvrir « Exécuter » et entrez cmd2 Dans l'« Invite de commandes », entrez mstsc/v:192.168.1.250/console.

Comment activer le service audio dans Win7 Comment activer le service audio dans Win7 Jul 10, 2023 pm 05:13 PM

Les ordinateurs disposent de nombreux services système pour prendre en charge l'application de divers programmes. Si l'ordinateur n'a pas de son et que la plupart des services audio ne sont pas activés après le dépannage des problèmes matériels, comment activer les services audio dans Win7 ? De nombreux amis sont confus, donc pour la question de savoir comment activer le service audio dans Win7, l'éditeur ci-dessous vous présentera comment activer le service audio dans Win7. Comment activer le service audio dans Win7. 1. Recherchez l'ordinateur sur le bureau de l'ordinateur sous le système Windows 7, cliquez avec le bouton droit et sélectionnez l'option de gestion. 2. Recherchez et ouvrez l'élément de service sous Services et applications dans l'interface de gestion de l'ordinateur qui s'ouvre. Recherchez WindowsAudio sur l'interface du service à droite et double-cliquez pour ouvrir la modification. 4. Basculez vers le projet normal et cliquez sur Démarrer pour activer la fonction.

Quelle est la bonne façon de redémarrer un service sous Linux ? Quelle est la bonne façon de redémarrer un service sous Linux ? Mar 15, 2024 am 09:09 AM

Quelle est la bonne façon de redémarrer un service sous Linux ? Lors de l'utilisation d'un système Linux, nous rencontrons souvent des situations dans lesquelles nous devons redémarrer un certain service, mais nous pouvons parfois rencontrer des problèmes lors du redémarrage du service, comme le fait que le service ne s'arrête ou ne démarre pas réellement. Par conséquent, il est très important de maîtriser la bonne manière de redémarrer les services. Sous Linux, vous pouvez généralement utiliser la commande systemctl pour gérer les services système. La commande systemctl fait partie du gestionnaire système systemd

See all articles