2

我需要一个工作示例,它使用 http 传输将日志发布到服务器上。我可以使用文件传输和控制台传输在文件和控制台上记录消息。我也尝试为http传输做同样的事情,winston clien 的源代码看起来像这样:

var winston = require('winston');

var logger = new (winston.Logger)({
transports: [
  new (winston.transports.Console)(),
  new (winston.transports.Http)({ host: 'localhost', port:8080 })
]
  });

logger.log('info', 'Hello world');

在运行此代码时,我收到如下错误:

D:\Balwant\Devlopment-Env\LoggingDemo\node_modules\winston\lib\winston\transports\http.js:52
req = (self.ssl ? https : http).request({
     ^
ReferenceError: self is not defined
at Http._request (D:\Balwant\Devlopment-    Env\LoggingDemo\node_modules\winston\lib\winston\transports\http.js:52:10)
at Http.log (D:\Balwant\Devlopment-Env\LoggingDemo\node_modules\winston\lib\winston\transports\http.js:109:8)
at emit (D:\Balwant\Devlopment-Env\LoggingDemo\node_modules\winston\lib\winston\logger.js:175:17)
at D:\Balwant\Devlopment-Env\LoggingDemo\node_modules\winston\node_modules\async\lib\async.js:111:13
at Array.forEach (native)
at _each (D:\Balwant\Devlopment-Env\LoggingDemo\node_modules\winston\node_modules\async\lib\async.js:32:24)
at Object.async.each (D:\Balwant\Devlopment-Env\LoggingDemo\node_modules\winston\node_modules\async\lib\async.js:110:9)
at Logger.log (D:\Balwant\Devlopment-Env\LoggingDemo\node_modules\winston\lib\winston\logger.js:203:9)
at Object.<anonymous> (D:\Balwant\Devlopment-Env\LoggingDemo\logger.js:10:8)
at Module._compile (module.js:456:26)

由于我是 node.js 的新手,我不知道如何处理它。我尝试在谷歌上搜索解决方案,但没有得到任何解决方案。请帮助我。

谢谢

4

2 回答 2

2

首先winstonwinstond是不同的包。您可以查看此博客文章以了解差异。

您可能还需要为 winston 构建自己的 HTTP 传输(如果您真的想使用 winston)。因此它可以与您的特定端点协议一起使用。

您可以按照此处指定的方式创建自定义 winston 传输。然后您可以使用请求之类的东西将日志数据发送到您的 HTTP 端点。

祝你好运。

网络传输

我不相信winston.transports.Http存在,但我认为你正在寻找这个:

new winston.transports.Webhook({ 'host': 'localhost', 'port': 8080, 'path': '/collectdata' })

本例所示。

温斯顿

我的错误,它确实有 winston.transports.Http,但你需要winstond

您可以查看此示例以将winstond用作 http 守护程序。然后将您的 Http 日志发送给它。

所以这:

new winston.transports.Http({ host: 'localhost', port: 8080})

应该指向一个winstond守护进程,如:

var winstond = require('winstond');

var http = winstond.http.createServer({
  services: ['collect', 'query', 'stream'],
  port: 8080
});

http.add(winstond.transports.Console, {});
http.listen();
于 2014-10-15T12:27:35.037 回答
-5
    var winston = require('winston');

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

    module.exports = logger;

add this line were ever u wanted to lg the error message
var logger = require('../../config/logger.js');
logger.info("the default logger with my tricked out transports is rockin this module");
于 2015-09-28T11:42:30.000 回答