【问题标题】:Winston-logger not working in modulesWinston-logger 不在模块中工作
【发布时间】:2018-08-06 22:45:28
【问题描述】:

我已经制作了一个 winston 模块,我将它导入到所有需要记录的模块中。但是,它只会在我的应用程序入口点(我开始使用的入口点)中记录条目。

我的实现做错了什么?

logger.js(温斯顿模块)

var winston = require('winston');

var logger = new (winston.Logger)({
  transports: [
    new winston.transports.File({ 
      filename: __dirname + '/logger.log', 
      json: false,
      timestamp: function () {
        return new Date()
      } 
    })
  ],
  exceptionHandlers: [
    new winston.transports.File({ filename: __dirname + '/exceptions.log', json: false })
  ],
  exitOnError: false
});

module.exports = logger;

主节点文件(这里可以记录日志):

var logger = require('./utils/logger');

其他需要记录的模块(记录不工作,没有错误信息)

var logger = require('../utils/logger');

logger.error('Error to log')

任何想法我做错了什么?

【问题讨论】:

    标签: node.js logging winston


    【解决方案1】:

    我已尝试根据您的要求创建一个示例。这可能有助于找到您的问题。

    包.json

    {
      "name": "winston",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "dependencies": {
        "express": "4.16.2",
        "http": "0.0.0",
        "nodemon": "1.15.1",
        "winston": "2.4.0"
      },
      "devDependencies": {},
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "author": "",
      "license": "ISC"
    }
    

    index.js

    const express = require('express');
    const app = express();
    const logger = require("./logger");
    
    app.listen(3000, () => {
      logger.log("info", 'Example app listening on port 3000!');
      const data = require("./data")(app);
    });
    

    logger.js

    var winston = require('winston');
    var logger = new (winston.Logger)({
      transports: [
        new winston.transports.File({
          filename: __dirname + '/logger.log',
          json: false,
          timestamp: function () {
            return new Date()
          },
          handleExceptions: true,
          humanReadableUnhandledException: true,
        })
      ],
      exceptionHandlers: [
        new winston.transports.File({ filename: __dirname + '/exceptions.log', json: false })
      ],
      exitOnError: false
    });
    module.exports = logger;
    module.exports.stream = {
      write: function (message, encoding) {
        logger.info(message);
      }
    };
    

    数据.js

    const logger = require("./logger");
    logger.log("info", 'executes data.js');
    
    module.exports = ((app) => {
    
        app.get('/', (req, res) => {
            logger.log("info", "Default route executes");
            res.send("hello world from data file");
        });
    
        app.get('/hello', (req, res) => {
            logger.log("info", "hello route executes");
            res.send("hello route executes");
        });
    
        app.use(function (err, req, res, next) {
            logger.log("info", "error routing called");
            logger.log("error", err);
            if (err.name === 'UnauthorizedError') {
                res.status(401).json({ status: 0, code: 401, type: "unauthorised", message: err.name + ": " + err.message });
            } else {
                res.status(404).json({ status: 0, code: 404, type: "ENOENT", message: "file not found" });
            }
        });
        return app;
    });
    

    在上面的代码中,您似乎应该使用 logger.log 并添加第一个参数作为日志类型。 日志有6个级别。

    1. 错误
    2. 警告
    3. 信息
    4. 冗长
    5. 调试

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-04
      • 2014-07-05
      • 2021-04-06
      • 2021-10-23
      • 1970-01-01
      • 2018-04-01
      • 1970-01-01
      • 2015-02-06
      相关资源
      最近更新 更多