【问题标题】:winston killing node process温斯顿杀死节点进程
【发布时间】:2016-03-23 01:45:59
【问题描述】:

我将 winston 记录器添加到我的 node.js 代码中,该代码用于运行直到被杀死。 添加记录器后,进程终止。即使我只是需要记录器而不使用它。

我的 logger.js 是:

var winston     = require ('winston'),
    path        = require ('path');
var DailyRotateFile = require('winston-daily-rotate-file');

var logger = new (winston.Logger)({
    transports: [
        new DailyRotateFile({
            name: 'dropped-key',
            datePattern: '.yyyy-MM-ddTHH',
            filename: path.join(__dirname, "droppedKeyLog", "log_file.log"),
            level: 'silly'
        }),
        new DailyRotateFile({
            name: 'errorLogger',
            datePattern: '.yyyy-MM-ddTHH',
            filename: path.join(__dirname, "errorLog", "log_file.log"),
            level: 'error'
        }),
        new DailyRotateFile({
            name: 'debug-file',
            datePattern: '.yyyy-MM-ddTHH',
            filename: path.join(__dirname, "debugLog", "log_file.log"),
            level: 'debug'
        }),
        new (winston.transports.Console)({ level: 'debug' })

    ],
    exceptionHandlers: [
        new DailyRotateFile({
            name: 'exception-file',
            filename:  path.join(__dirname, "exceptionLog", "log_file.log"),
            datePattern: '.yyyy-MM-ddTHH'
        })
    ]
});

logger.exitOnError = false;

module.exports = {
    debugLogger : logger.loggers.get('debugLogger'),
    keyLogger : logger.loggers.get('dropped-key')
};

我需要知道为什么会发生这种情况以及如何解决这个问题。

【问题讨论】:

  • 您没有忘记在logger.js 中包含一个模块winston
  • 我已经包含了这个模块。

标签: node.js logging winston


【解决方案1】:

我在做npm install winston-daily-rotate-file --save之后假设

var DailyRotateFile = require('winston-daily-rotate-file');

module.exports = {
    debugLogger : logger.loggers.get('debugLogger'),
    keyLogger : logger.loggers.get('dropped-key')
};

您写的调试记录器传输模块的名称不正确。它将是debug-file

您还从 logger.loggers 中获取了这些内容。它将来自 logger.transsports。

相应的代码将是:

module.exports = {
  debugLogger : logger.transports['debug-file'],
  keyLogger : logger.transports['dropped-key']
};

您的节点卡在 module.exports 部分。替换它,它将运行...

【讨论】:

  • 谢谢。它现在没有死,但它仍然没有创建日志文件。我打电话给debugLogger.debug(func.name, ": input Data: ", data);
  • 您需要通过删除 var 来全球化记录器变量。在整个项目中使用记录器变量并设置级别。例如logger.silly("傻");或 logger.error("错误")。
  • 或者你也可以使用 log_obj = module.exports = { debugLogger : logger.transports['debug-file'], keyLogger : logger.transports['dropped-key'] };并像 log_obj.debugLogger.debug(func.name, ": input Data: ", data); 一样使用它
【解决方案2】:

要在单独的记录器/文件中使用多个传输,您可以使用 categories

查看https://github.com/winstonjs/winston#working-with-multiple-loggers-in-winston

winston.loggers.add('cat-dropped',{
  transports:[
    new DailyRotateFile({
      name: 'dropped-key',
      datePattern: '.yyyy-MM-ddTHH',
      filename: path.join(__dirname, "droppedKeyLog", "log_file.log"),
      level: 'silly'
    })
  ]
});

winston.loggers.add('cat-debug',{
  transports:[
   new DailyRotateFile({
        name: 'debug-file',
        datePattern: '.yyyy-MM-ddTHH',
        filename: path.join(__dirname, "debugLog", "log_file.log"),
        level: 'debug'
    })
  ]
});

winston.handleExceptions(
  new DailyRotateFile({
    name: 'exception-file',
    filename:  path.join(__dirname, "exceptionLog", "log_file.log"),
    datePattern: '.yyyy-MM-ddTHH'
}));

之后,您可以获得记录器。

var droppedLogger = winston.loggers.get('cat-dropped');
var debugLogger = winston.loggers.get('cat-debug');

droppedLogger.info('');
debugLogger.debug('');

如果还没有创建日志文件,检查文件名的路径,文件夹日志应该已经创建了

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-19
    • 1970-01-01
    • 2016-08-29
    • 2012-03-07
    • 2018-11-19
    • 2020-11-05
    • 2016-01-11
    • 1970-01-01
    相关资源
    最近更新 更多