小編給大家分享一下如何在Node.js服務(wù)中寫(xiě)日志,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
創(chuàng)新互聯(lián)建站是一家專(zhuān)業(yè)提供牟平企業(yè)網(wǎng)站建設(shè),專(zhuān)注與網(wǎng)站建設(shè)、成都網(wǎng)站設(shè)計(jì)、H5頁(yè)面制作、小程序制作等業(yè)務(wù)。10年已為牟平眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)網(wǎng)站建設(shè)公司優(yōu)惠進(jìn)行中。
用 Node 寫(xiě)服務(wù)端的時(shí)候,比較頭疼的是排查定位問(wèn)題,因?yàn)椴幌?Chrome 瀏覽器中,我們有直接的報(bào)錯(cuò)提示在 dev tool 中,或者我們可以直接打斷點(diǎn)調(diào)試。
經(jīng)常我們會(huì)遇到在明明我在 test 環(huán)境可以啊,為什么 live 環(huán)境不行的問(wèn)題。假如沒(méi)有日志,對(duì)于這種問(wèn)題,根據(jù)毫無(wú)頭緒。
先保證你全局安裝了 koa2:
npm i koa2 -g
然后執(zhí)行:
koa2 -e node-log # 新建一個(gè)項(xiàng)目 cd node-log npm i # 安裝依賴(lài) npm run start # 啟動(dòng)
基礎(chǔ)的服務(wù)就搭建起來(lái)了。訪問(wèn) http://localhost:3000/,就可以看到以下的頁(yè)面:

以上是一個(gè)快速搭建 koa 服務(wù)的方法。這個(gè)項(xiàng)目中內(nèi)置了一個(gè)寫(xiě)日志的庫(kù)——koa-logger。我們先來(lái)看看它做了什么東西吧。
這個(gè)庫(kù)比較簡(jiǎn)單,記錄請(qǐng)求的基本信息,比如請(qǐng)求的方法、URl、用時(shí)等。作為中間件中使用,注意:推薦放在所有的中間件之前,這個(gè)跟 koa 的洋蔥模型有關(guān)。假如不是第一個(gè),計(jì)算時(shí)間會(huì)不準(zhǔn)確。
var logger = require('koa-logger');
app.use(logger());在我們?cè)L問(wèn)響應(yīng)的資源的時(shí)候,會(huì)在控制臺(tái)輸出相應(yīng)的日志如下:
<-- 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 -
默認(rèn)情況下,日志是通過(guò) console 的方式直接輸出到控制臺(tái)中,假如我們需要對(duì)日志做自定義的操作,比如寫(xiě)入到日志文件中等。可以通過(guò)類(lèi)似完成,比如我記錄時(shí)間:
app.use(logger((str) => {
console.log(new Date() + str)
// redirect koa logger to other output pipe
// default is process.stdout(by console.log function)
}))結(jié)果:
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-logger 比較輕量,也暴露了相對(duì)靈活的接口。但在實(shí)際業(yè)務(wù)中使用,我個(gè)人推薦使用 koa-log4js。主要理由如下:
koa-logger 看起來(lái)只支持中間件的使用方式,而不支持上報(bào)特定日志的功能。
內(nèi)置的功能比較少。比如日志的分類(lèi)和落盤(pán)等。
koa-log4js 對(duì) log4js 做了一層包裝,從而支持 Koa 日志的中間件。它的配置和 log4js 是保持一致的。所以假如你用 log4js 的話,使用上應(yīng)該是一致的。
安裝:
npm i --save koa-log4
先來(lái)看使用,根目錄新建一個(gè)文件夾 log。并且新建一個(gè)文件夾 utils,在其中新建文件 logger.js。代碼如下:
const path = require('path');
const log4js = require('koa-log4');
const RUNTIME_PATH = path.resolve(__dirname, '../');
const LOG_PATH = path.join(RUNTIME_PATH, 'log');
log4js.configure({
// 日志的輸出
appenders: {
access: {
type: 'dateFile',
pattern: '-yyyy-MM-dd.log', //生成文件的規(guī)則
alwaysIncludePattern: true, // 文件名始終以日期區(qū)分
encoding: 'utf-8',
filename: path.join(LOG_PATH, 'access.log') //生成文件名
},
application: {
type: 'dateFile',
pattern: '-yyyy-MM-dd.log',
alwaysIncludePattern: true,
encoding: 'utf-8',
filename: path.join(LOG_PATH, 'application.log')
},
out: {
type: 'console'
}
},
categories: {
default: { appenders: [ 'out' ], level: 'info' },
access: { appenders: [ 'access' ], level: 'info' },
application: { appenders: [ 'application' ], level: 'all'}
}
});
// getLogger 傳參指定的是類(lèi)型
exports.accessLogger = () => log4js.koaLogger(log4js.getLogger('access')); // 記錄所有訪問(wèn)級(jí)別的日志
exports.logger = log4js.getLogger('application');簡(jiǎn)單解釋一下,configure 是 log4js-node 的配置(后文會(huì)詳解),通過(guò) getLogger 函數(shù)傳參為日志類(lèi)型,比如 access 是訪問(wèn)級(jí)別日志。
然后在 app.js 中加入:
const { accessLogger, logger } = require('./utils/logger');
app.use(accessLogger())以及 routes/index.js 中加入:
+ const { logger } = require('../utils/logger')
router.get('/', async (ctx, next) => {
+ logger.info('我是首頁(yè)');
await ctx.render('index', {
title: 'Hello Koa 2!'
})
})刷新,可以看到在 log 文件夾中輸出兩個(gè)文件:

分別記錄了:
[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 - 我是首頁(yè)
接下來(lái)我們來(lái)看看 log4js 的配置。
日志的分級(jí),主要作用是更好的展示日志(不同顏色)、有選擇的落盤(pán)日志,比如在生產(chǎn)中避免一些 debug 的敏感日志被泄露。log4js 默認(rèn)有九個(gè)分級(jí)(你可以通過(guò) levels 進(jìn)行修改),如下:
{
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")
}如下圖所示:

只會(huì)輸出級(jí)別相等或者級(jí)別高的日志。比如你配置了 WARN,就不會(huì)輸出 INFO 的日志。
可以在下面配置的 categories 中配置不同的類(lèi)型日志的日志級(jí)別。
日志類(lèi)別。必須配置默認(rèn)日志類(lèi)別,用于沒(méi)有命中的情況下的兜底行為。該配置為一個(gè)對(duì)象,key 值為分類(lèi)名稱(chēng)。比如上述 demo 中:
{
default: { appenders: [ 'out' ], level: 'info' },
access: { appenders: [ 'access' ], level: 'info' },
application: { appenders: [ 'application' ], level: 'all'}
}其中每個(gè)類(lèi)別都有兩個(gè)配置 appenders 是一個(gè)字符串?dāng)?shù)組,是輸出配置(后文中會(huì)詳解),可以指定多個(gè),至少要有一個(gè)。level 是上文日志級(jí)別。
解決了日志分級(jí)和分類(lèi),接下來(lái)是日志落盤(pán),也就是輸出日志的問(wèn)題。對(duì)應(yīng)的配置是 appenders,該配置的 key 值為自定義的名稱(chēng)(可以給 categories 中的 appenders 使用),屬性值為一個(gè)對(duì)象,配置輸出類(lèi)型。如下所示:
// 日志的輸出
appenders: {
access: {
type: 'dateFile',
pattern: '-yyyy-MM-dd.log', //生成文件的規(guī)則
alwaysIncludePattern: true, // 文件名始終以日期區(qū)分
encoding: 'utf-8',
filename: path.join(LOG_PATH, 'access.log') //生成文件名
},
out: {
type: 'console'
}
}其中,out 指的是通過(guò) console 輸出,這個(gè)可以作為我們的一個(gè)兜底。access 中 type 為 dataFile,指的是輸出文件,然后配置文件的命名和輸出路徑。除了這個(gè)類(lèi)型,詳情可以看官網(wǎng),比如 SMTP 通過(guò)郵件發(fā)送(這個(gè)需要 nodemailer)
日志分級(jí)、日志分類(lèi)以及日志落盤(pán),配置上的關(guān)系如下:

以上是“如何在Node.js服務(wù)中寫(xiě)日志”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
當(dāng)前標(biāo)題:如何在Node.js服務(wù)中寫(xiě)日志
文章鏈接:http://chinadenli.net/article18/gdsegp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、Google、軟件開(kāi)發(fā)、微信公眾號(hào)、電子商務(wù)、網(wǎng)站營(yíng)銷(xiāo)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)