winston log 库如何创建 custom logger
代碼:
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 文件,下面的例子將申請一個簡單的日志。
// Require logger.js const {usersLogger, transactionLogger} = require('./logger');...........// Your users' code setups.................// What to record to users.log usersLogger.info('New user created'); usersLogger.error(`Unable to find user: ${err}`);在實際應用中,我們可以在系統中創建新用戶或發生新事務時創建以下日志。 屬性將被提取并記錄在日志文件中。
User.js:
// Require logger.js const {usersLogger, transactionLogger} = require('./logger'); ...........// Your users' code setups................. usersLogger.info('User created!',{user_id: `${res._id}`,user_name: `${res.name}`,user_email: `${res.email}`, ); usersLogger.error(`Unable to find user: ${err}`);Transaction.js::
// Require logger.js const {usersLogger, transactionLogger} = require('./logger');...........// Your Transaction' code setups.................// Transaction logs transactionLogger.info('Session connected', { session_id: `${req.id}`}, {user_id: `${res._id}`); transactionLogger.info('Transaction Initiated', { transaction_id: `${req.transaction_id}`}, {user_id: `${res.user_id}`); transactionLogger.info('Transaction completed', {user_id: `${res.user_id}`, {`${req.transaction_amout}`, `${req.transaction_code}`}); transactionLogger.error('Transaction Failed', `{${err}`,session_id: `${req.id}`}, {user_id: `${res._id}`);這使得管理日志變得更容易,因為針對特定問題進行了分離,并且提供了用戶和事務屬性以幫助將其縮小到特定用戶或事務。
Other logging middleware
除了 winston 之外,我們還有如下其他庫選擇。
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 以 JSON 格式記錄日志條目。 該格式是使用時間戳和主機名等基本字段自動生成的。
像 Winston 記錄器一樣,創建一個記錄器實例,并記錄您的消息。
const bunyan = require("bunyan"); const log = bunyan.createLogger({ name: "myapp" }); log.info("hi"); log.warn({ lang: "fr" }, "au revoir");輸出:
{“name”:“myapp”,“hostname”:“Doe”,“pid”:14244,“level”:30,“msg”:“hi”,“time”:“2020-11-12T08:22:41.398Z”,“v”:0}
{“name”:“myapp”,“hostname”:“Doe”,“pid”:14244,“level”:40,“lang”:“fr”,“msg”:“au revoir”,“time”:“2020-11-12T08:22:41.4
00Z”,“v”:0}
以下 Log4js 示例將錯誤日志記錄到文件 (log4.log) 和控制臺附加程序中。
// Require Log4js const log4js = require('log4js');// Logger configuration log4js.configure({appenders: {fileAppender: { type: 'file', filename: './logs/log4.log' },console: { type: 'console' }},categories: {default: { appenders: ['fileAppender', 'console'], level: 'error' }} });// Create the logger const logger = log4js.getLogger();// Log some messages logger.trace('Trace, log4js!'); logger.debug('Debug, log4js!'); logger.info('Hello, log4js!'); logger.warn('Heads up, log4js!'); logger.error('Danger, log4js!'); logger.fatal('Fatal, log4js!');輸出:
[2020-11-12T11:27:21.278] [ERROR] default - Danger, log4js!
[2020-11-12T11:27:21.291] [FATAL] default - Fatal, log4js!
總結
以上是生活随笔為你收集整理的winston log 库如何创建 custom logger的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 命运冠位指定银棋在哪里刷 命运冠位指定银
- 下一篇: FGO山之翁技能突破材料有哪些 山之翁技