2016-06-08 79 views
3

我们有一个angularjs应用程序,我们希望将任何错误或任何信息记录到服务器(写入文件)。很多建议都指向使用winston.js。但我不知道如何在angularjs应用程序中使用winston.js。在angularjs应用程序中使用winston.js

任何帮助/建议将是伟大的。

回答

3

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

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

因为说实话,winston看起来像是一个Nodejs记录器 - 我不确定它会在浏览器中工作。

添加值提供商温斯顿

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); 

你可以看到这个代码是怎么回事。你可能会有一个更干净的implimentation,它只是循环访问日志级别的字符串数组来生成委托方法。

所以现在你只需要像往常一样将你的消息记录到$ log,并且它们将被传送到winston。此外,还会记录任何角度或第三方模块错误。

相关问题