如何在Sails.js应用程序中全局提供Winston?

时间:2016-04-22 13:33:22

标签: javascript node.js logging sails.js winston

我有一个Sails.js应用程序,我希望能够使用Winston和Loggly来记录消息。现在,我有这样的服务:

LogService.log('info', 'Log in attempt', { email: req.body.email });

我可以通过执行以下操作来调用此服务:winston.log('info', 'Log in attempt', { email: req.body.email });

理想情况下,我只想在应用程序的任何地方直接使用Winston:TextBox,而无需创建服务或必须在我想要使用它的每个控制器中要求和配置Winston。如何使其全球可用?

1 个答案:

答案 0 :(得分:0)

如果你在api/services中拥有它,则不需要每次都初始化它。如果您不希望每次都需要模块,那么您可以这样做。移动这些行

winston = require('winston')
require('winston-loggly')

config/bootstrap.js并将其更改为:

sails.winston = require('winston');
sails.winston-loggly = require('winston-loggly');

和您的服务

log: function(type, message, content) {
   // Require and configure Winston with Loggly

    sails.winston.add(winston.transports.Loggly, {
        token       : ***,    // Hiding my real token
        subdomain   : ***,
        tags        : ['sails-web-service'],
        json        :true
    });

// Attach context to the content
    var finalContent = { timestamp: Date.now(), pid: process.pid };
    for (var attribute in content) { finalContent[attribute] = content[attribute]; }

    // Send the log
    sails.winston.log(type, message, finalContent);
}

您可以尝试使用sails-hook-winston

库扩展了日志,因此其配置转到config/log.js。在你的情况下,它看起来应该更像这样:

transports: [
    {
        module: require('winston-loggly').Loggly,
        config: {
            token       : ***,    // Hiding my real token
            subdomain   : ***,
            tags        : ['sails-web-service'],
            json        :true
        }
    }
]