Estoy usando en mi código el servicio angularJS para iniciar sesión ($ log.error (), $ log.debug (), $ log.info (), etc.) y funciona bien.

Ahora, estoy tratando de deshabilitar todos los registros. Ya probé esto:

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

app.config(
    ['$logProvider',
    function ($logProvider) {
        $logProvider.debugEnabled(false);
    }]
);

Pero esto no hace nada, los registros continúan mostrando ...

¿Cuál es la mejor manera de deshabilitar todos los registros de angularJS que pongo en mi código?

EDITAR:

Estoy llamando a los registros de esta manera:

(function () {
    app.controller('MyController', ['$log',

            function($log) {
                 this.testFunction = function() {
                    $log.debug("debug");
                    $log.info("info");
                    $log.error("error");
                };

            }])
})();
5
vale 27 ago. 2014 a las 23:37

3 respuestas

La mejor respuesta

Puede "anular" los métodos de registro como a continuación (aquí publicación completa):

angular.module('app', [])

.config(['$provide', function ($provide) {
    $provide.decorator('$log', ['$delegate', function ($delegate) {
        // Keep track of the original debug method, we'll need it later.
        var origDebug = $delegate.debug;
        /*
         * Intercept the call to $log.debug() so we can add on 
         * our enhancement. We're going to add on a date and 
         * time stamp to the message that will be logged.
         */
        $delegate.debug = function () {
            var args = [].slice.call(arguments);
            args[0] = [new Date().toString(), ': ', args[0]].join('');

            // Send on our enhanced message to the original debug method.
            origDebug.apply(null, args)
        };

        return $delegate;
    }]);

También debe leer http: // blog.projectnibble.org/2013/12/23/enhance-logging-in-angularjs-the-simple-way/ para ver cómo crear un proveedor de registro completo que puede configurar sobre la marcha

6
Piotr Stapp 27 ago. 2014 a las 19:42

La función debugEnabled debería deshabilitar solo los mensajes $log.debug(). Entonces, si desea deshabilitar el registro con config simple como lo ha escrito, cambie el nombre de todas sus llamadas de depuración a $log.debug, no a $log.log o $log.error o {{X6} } o $log.whatever.

Puede ver un ejemplo aquí http://jsfiddle.net/jccrosby/N2B6R/light/

0
walts 27 ago. 2014 a las 19:54

Aquí están mis dos centavos:

var IN_DEVELOPMENT = true;

$provide.decorator('$log', ['$delegate', function ($delegate)
{
        var originals = {};
        var methods = ['info' , 'debug' , 'warn' , 'error'];

        angular.forEach(methods , function(method)
        {
            originals[method] = $delegate[method];
            $delegate[method] = function()
            {
                if (IN_DEVELOPMENT) {
                    var args = [].slice.call(arguments);
                    var timestamp = new Date().toString();
                    args[0] = [timestamp.substring(4 , 24), ': ', args[0]].join('');
                    originals[method].apply(null , args);
                }
            };
       });

       return $delegate;
}]);

Simplemente configure booleano y listo.

1
Joel Chu 31 dic. 2015 a las 21:31