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 之外,我们还有如下其他库选择。

  1. 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"

  1. Bunyan

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}

  1. log4js

以下 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!

(0)

相关推荐