首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Node.js -记录/使用摩根和温斯顿

Node.js -记录/使用摩根和温斯顿
EN

Stack Overflow用户
提问于 2015-01-13 00:29:40
回答 5查看 86.8K关注 0票数 114

我们使用morgan来记录我们的快速转换:

代码语言:javascript
复制
var morgan  = require('morgan');
morgan('combined');
// a format string
morgan(':remote-addr :method :url :uuid');
// a custom function
morgan(function (req, res) {
  return req.method + ' ' + req.url + ' ' + req.uuid;
})

此外,我们使用winston来记录我们的其他日志:

代码语言:javascript
复制
var winston = require('winston');
var logger = new (winston.Logger)({
  transports: [
         new (winston.transports.Console)({ level: 'info' }),
          new (winston.transports.File)({ filename: '/var/log/log-file.log' })
  ]
});

有没有办法将这两个记录器合并在一起?现在的情况是,当winston写入/var/log/log-file.log时,morgan被写入我的标准输出。

我希望记录器文件能够从快速转换信息和我想要的其他信息(logger.info())中进行组合。

EN

回答 5

Stack Overflow用户

发布于 2015-03-03 13:03:04

这篇文章对你想做的事情做得很好。

http://tostring.it/2014/06/23/advanced-logging-with-nodejs/

对于您的特定代码,您可能需要如下内容:

代码语言:javascript
复制
var logger = new winston.Logger({
    transports: [
        new winston.transports.File({
            level: 'info',
            filename: './logs/all-logs.log',
            handleExceptions: true,
            json: true,
            maxsize: 5242880, //5MB
            maxFiles: 5,
            colorize: false
        }),
        new winston.transports.Console({
            level: 'debug',
            handleExceptions: true,
            json: false,
            colorize: true
        })
    ],
    exitOnError: false
});

logger.stream = {
    write: function(message, encoding){
        logger.info(message);
    }
};

app.use(require("morgan")("combined", { "stream": logger.stream }));

这将设置Winston将一个日志和一个文件写入控制台。然后,您可以使用最后一个表达式将morgan中间件的输出传递给winston。

票数 162
EN

Stack Overflow用户

发布于 2017-02-14 00:15:32

在Typescript中:

代码语言:javascript
复制
let logger = new (winston.Logger)({
    exitOnError: false,
    level: 'info',
    transports: [
        new (winston.transports.Console)(),
        new (winston.transports.File)({ filename: 'app.log'})
    ]
})

class MyStream {
    write(text: string) {
        logger.info(text)
    }
}
let myStream = new MyStream()
app.use(morgan('tiny', { stream: myStream }));
票数 24
EN

Stack Overflow用户

发布于 2016-08-13 02:15:52

更新最后一行以删除警告

代码语言:javascript
复制
app.use(require("morgan")("combined", { stream: logger.stream }));
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27906551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档