在angularjs应用程序中使用winston.js

时间:2016-06-08 14:13:56

标签: angularjs winston

我们有一个angularjs应用程序,我们要将任何错误或任何信息记录到服务器(写入文件)。很多建议指向使用winston.js。但我不确定如何将winston.js与angularjs应用程序一起使用。

任何帮助/建议都会很棒。

1 个答案:

答案 0 :(得分:3)

对于AngularJS应用程序,最好的解决方案是为默认的$ log服务创建一个装饰器,然后包装服务器端记录器。

如果您决定不想使用winston,想要使用其他远程记录器或编写自己的远程记录器,则此方法将起作用。通过使用装饰器 - 您将从代码中消除此影响,因为在您的应用程序中,您仍将使用默认的$log服务。

因为老实说,winston看起来像是一个Nodejs记录器 - 我不确定它是否可以在浏览器中运行。

为winston添加值提供程序

var winston = require('winston');
app.value('winston', winston);

然后创建你的装饰者

logDecorator.$inject = ['$provide'];
function logDecorator($provide) {

   $provide.decorator('$log', ['$delegate', 'winston', function($delegate, winston) {

        var origLog = $delegate.log;
        var origDebug = $delegate.debug;
        var origError = $delegate.error;
        // ...

        $delegate.log = function() {
            winston.log(arguments);
            origLog.apply(null, arguments);
        }

        $delegate.debug = function() {
            winston.debug(arguments);
            origDebug.apply(null, arguments);
        }

        $delegate.error = function() {
            winston.error(arguments);
            origError.apply(null, arguments);
        }
    }]
}

app.config(logDecorator);

您可以看到此代码的去向。你可以有一个更清晰的实现,只是循环通过字符串数组的日志级别数组来生成委托方法。

所以现在你只需像往常一样将你的消息记录到$ log,然后他们将通过管道输送到winston。此外,还将记录任何角度或第三方模块错误。