const { createLogger, format, transports, config } = require('winston');
const usersLogger = createLogger({
levels: config.syslog.levels,
format: combine(
timestamp({
format: 'YYYY-MM-DD HH:mm:ss'
}),
transports: [
new transports.File({ filename: 'users.log' })
]
});
const transactionLogger = createLogger({
transports: [
new transports.File({ filename: 'transaction.log' })
]
});
module.exports = {
usersLogger: usersLogger,
transactionLogger: transactionLogger
};
在上面的例子中,應用程式有兩個服務,使用者和交易。 為此類服務建立不同的記錄器将是相關的。 這些區分了各種應用程式服務的問題。
例如,假設一個處理使用者服務屬性的 user.js 檔案,下面的例子将申請一個簡單的日志。

這使得管理日志變得更容易,因為針對特定問題進行了分離,并且提供了使用者和事務屬性以幫助将其縮小到特定使用者或事務。
Other logging middleware
除了 winston 之外,我們還有如下其他庫選擇。
morgan
Morgan 用于記錄 HTTP Web 伺服器。 它結合了 Node.js 和 Express。 Morgan 記錄來自 HTTP 伺服器的響應和請求。 它的日志條目基于 HTTP 請求和錯誤日志行。
Logger 函數通路 req 和 res 等對象。
res - HTTP 響應對象。
req - HTTP 請求對象。
該函數将向日志行傳回一個字元串日志條目。
Morgan 旨在記錄錯誤,就像 Apache 和 Nginx 等伺服器對通路日志或錯誤日志執行的方式一樣。
以下是 Morgan 記錄器的示例:
const express = require('express')
const fs = require('fs')
const morgan = require('morgan')
const path = require('path')
const app = express()
// Create a write stream (in append mode)
const accessLogStream = fs.createWriteStream(path.join(__dirname, 'access.log'), { flags: 'a' })
// Setup the logger
app.use(morgan('combined', { stream: accessLogStream }))
app.get('/', (req, res) => {
res.send('Hello World!')
})
app.listen(3000, () => {
console.log("Server Listening on port 3000");
})
運作應用程式并在浏覽器上點選 http://localhost:3000/。 Morgan 将在 access.log 檔案中記錄以下日志。
::1 - - [12/Nov/2020:09:19:46 +0000] “GET / HTTP/1.1” 304 - “-” “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36”
Bunyan
Bunyan 以 JSON 格式記錄日志條目。 該格式是使用時間戳和主機名等基本字段自動生成的。
像 Winston 記錄器一樣,建立一個記錄器執行個體,并記錄您的消息。