web-dev-qa-db-ja.com

AngularJSで$ log.debugをオン/オフにする方法

$ log.debug( "Foo")を使用しようとしています。どうすればオンにできますか。どこにもサンプルが見つかりません。 configで設定する必要があると思いますが、それを機能させることはできません。

オン/オフスイッチはどこで設定しますか?

77
Eric Rohlfs

$ logProvider.debugEnabled(true)

これは、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

デフォルトではオンです。

137
rgaskill

デフォルトの$ 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/ のJohn Crosbyの仕事から着想を得たものです

13
Diego

私は同じ問題に直面しましたが、ブラウザコンソールから有効にするだけでコーディングすることで解決する問題ではありません

ブラウザのコンソールに移動し、レベルを詳細に設定します

12
nitin

ディエゴの応答に基づきますが、いくつかの環境設定を追加し、短くします。次を使用してアプリを実行できます:NODE_ENV=development または NODE_ENV=production

例:1。 NODE_ENV=development webpack-dev-server

例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;
});
1

さて、ソリューションではVerboseフラグをオンにする必要があるため、ログインを処理する最も良い方法はangularをネイティブの_console.log_関数を変更することだアプリケーション全体の本番環境で。

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

それでおしまい。実稼働環境では、これによりすべての場所でロギングが無効になります。また、現在、すべてのコントローラーに_$log_を挿入する必要はありません。単にconsole.log("logging message")が機能します!

必要に応じて、_console.info_、_console.warn_、_console.error_、および_console.debug_を無効にすることもできます。

0
Meliodas