我們有一個angularjs應用程序,我們希望將任何錯誤或任何信息記錄到服務器(寫入文件)。很多建議都指向使用winston.js。但我不知道如何在angularjs應用程序中使用winston.js。在angularjs應用程序中使用winston.js
任何幫助/建議將是偉大的。
我們有一個angularjs應用程序,我們希望將任何錯誤或任何信息記錄到服務器(寫入文件)。很多建議都指向使用winston.js。但我不知道如何在angularjs應用程序中使用winston.js。在angularjs應用程序中使用winston.js
任何幫助/建議將是偉大的。
對於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。此外,還會記錄任何角度或第三方模塊錯誤。