美文网首页收藏
winston log 库如何创建 custom logger

winston log 库如何创建 custom logger

作者: _扫地僧_ | 来源:发表于2021-11-24 07:37 被阅读0次

    代码:

    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!

    相关文章

      网友评论

        本文标题:winston log 库如何创建 custom logger

        本文链接:https://www.haomeiwen.com/subject/avwcaltx.html