Firebase功能:在stackdriver控制台中使用winston进行日志记录

时间:2017-08-03 08:40:17

标签: node.js google-app-engine firebase logging winston

我无法让winston记录器将日志写入stackdriver控制台。我将我的功能部署为google firebase功能(使用firebase deploy)。 console日志记录工作正常,但我们不在项目中使用此类工具。

我尝试了什么:

请建议......我厌倦了实验(每次重新部署需要时间)

2 个答案:

答案 0 :(得分:2)

最后我做了什么 - 实现了custom transport实际调用了console.log。这有帮助。

const winston = require('winston');
const util = require('util');
const ClassicConsoleLoggerTransport = winston.transports.CustomLogger = function (options) {
    options = options || {};
    this.name = 'ClassicConsoleLoggerTransport';
    this.level = options.level || 'info';
    // Configure your storage backing as you see fit
};
util.inherits(ClassicConsoleLoggerTransport, winston.Transport);

ClassicConsoleLoggerTransport.prototype.log = function (level, msg, meta, callback) {
    let args = [msg, '---', meta];
    switch (level) {
        case 'verbose':
        case 'debug':
            console.log.apply(null, args);
            break;
        case 'notice':
        case 'info':
            console.info.apply(null, args);
            break;
        case 'warn':
        case 'warning':
            console.warn.apply(null, args);
            break;
        case 'error':
        case 'crit':
        case 'alert':
        case 'emerg':
            console.error.apply(null, args);
            break;
        default:
            console.log.apply(null, args);
    }
    callback(null, true);
};

答案 1 :(得分:1)

Winston的默认控制台传输失败,因为它在可用时使用console._stdout.write,而Firebase Functions不接受它。

现在可以尝试使用Google Cloud transport package for Stackdriver。尚未使用过,如果您使用的是Winston 3,它需要节点^8.11.2