2013-03-22 157 views
71

我試圖使用$ log.debug(「Foo」)。它如何被打開。我無法在任何地方找到樣本。我認爲它需要在配置中設置,但我似乎也無法讓它工作。

從哪裏開啓和關閉開關?

回答

130

$ logProvider.debugEnabled(真)

這只是AngularJs 1.1.2或更高版本可用。

https://github.com/angular/angular.js/pull/1625

這裏是它被設置的一個例子。

var app = angular.module('plunker', []); 

app.config(function($logProvider){ 
    $logProvider.debugEnabled(true); 
}); 

app.controller('MainCtrl', function($scope, $log) { 
    $scope.name = 'World'; 
    $scope.model = {value: "test"}; 
    $log.debug('TEST Log'); 
}); 

http://plnkr.co/edit/HZCAoS?p=preview

默認情況下,它是。

+2

你把$ logProvider.debugEnabled(true)放在哪裏? – 2013-03-27 21:03:11

+0

謝謝。我使用的是較老版本的angularjs。我剛剛在我的app中覆蓋了angular.js文件中的日誌提供程序。 – 2013-03-28 14:45:17

+0

@EricRohlfs - 使用'config'塊。 – 2014-03-17 00:24:17

13

您可以使用修飾器覆蓋默認的$ log行爲以強化日誌級別。這是一個例子:

angular.module('app').config(function($logProvider, $provide){ 

    $logProvider.debugEnabled(false); 

    $provide.decorator('$log', function ($delegate) { 
     //Original methods 
     var origInfo = $delegate.info; 
     var origLog = $delegate.log; 

     //Override the default behavior 
     $delegate.info = function() { 

      if ($logProvider.debugEnabled()) 
       origInfo.apply(null, arguments) 
     }; 

     //Override the default behavior  
     $delegate.log = function() { 

      if ($logProvider.debugEnabled()) 
       origLog.apply(null, arguments) 
     }; 

     return $delegate; 
    }); 
}); 

這從約翰·克羅斯比的工作在http://www.thekuroko.com/using-angulars-log-provider/

1

基於迭戈的迴應,但增加了一些配置包膜,使之更短的靈感。 您可以簡單地運行您的應用程序使用:NODE_ENV=developmentNODE_ENV=production

E.g.1。 NODE_ENV=development webpack-dev-server

E.g.2。 NODE_ENV=production node app.js

$logProvider.debugEnabled(process.env.NODE_ENV === 'development'); 
$provide.decorator('$log', function($delegate) { 
    $delegate.info = $logProvider.debugEnabled() ? $delegate.info : function() {}; 
    $delegate.log = $logProvider.debugEnabled() ? $delegate.log : function() {}; 
    return $delegate; 
}); 
6

我也面臨着同樣的問題,但它不是通過編碼,而不是從瀏覽器控制檯

去只是使它能夠安慰瀏覽器就可以解決的問題,並設置級別爲verbose

+2

我不得不這樣做,以查看Chrome中的$ log.debug'消息。 – ThisClark 2017-08-02 04:11:51

+0

默認情況下關閉。 – commonpike 2018-01-16 14:19:15

0

好由於解決方案要求我們打開Verbose標誌,我認爲處理角度記錄的最佳方法是簡單地在整個應用程序中改變生產環境中的原生console.log函數。

angular.module("myModule") 
.config(function(){ 
    //if production environment 
    console.log =()=>{}; 
}) 

就是這樣。在生產環境中,這應該禁止任何地方的日誌記錄此外,現在無需在每個控制器中注入$log。 只需console.log("logging message")作品!

您也可以按照您的需要以相同的方式禁用console.info,console.warn,console.errorconsole.debug