2014-08-27 23 views
5

Tôi đang sử dụng mã của tôi dịch vụ angularJS để ghi nhật ký ($ log.error(), $ log.debug(), $ log.info(), v.v.) và nó hoạt động tốt.Tắt Ghi nhật ký trên AngularJS

Bây giờ, tôi đang cố tắt tất cả nhật ký. Tôi đã cố gắng này:

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

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

Nhưng điều này không có gì, các bản ghi tiếp tục cho thấy ...

cách tốt nhất để vô hiệu hóa tất cả các bản ghi angularJS mà tôi đặt trong mã của tôi là gì?

EDIT:

Tôi kêu gọi các bản ghi như thế này:

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

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

      }]) 
})(); 
+0

Đó chỉ là nghĩa vụ phải tắt $ log.debug(). Những nội dung đó vẫn hiển thị? – marneborn

+1

Có, vẫn hiển thị. Tôi có thể làm gì sai? Tôi đã chỉnh sửa để thêm cách tôi đang gọi nhật ký. – vale

Trả lời

6

Bạn có thể "đè" các phương pháp khai thác gỗ như dưới đây (here full post):

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

Bạn nên cũng đọc http://blog.projectnibble.org/2013/12/23/enhance-logging-in-angularjs-the-simple-way/ để xem cách tạo nhà cung cấp đăng nhập đầy đủ mà bạn có thể định cấu hình trên fly

+0

Nhưng tôi không muốn chỉnh sửa cách nhật ký hiển thị. Tôi chỉ muốn vô hiệu hóa tất cả các bản ghi ... – vale

+0

Nếu bạn loại bỏ dòng hoặc thêm nếu tuyên bố để 'origDebug.apply (null, args)' không có gì sẽ được hiển thị. Cùng với các phương pháp khác. Bằng cách này, bạn có thể dễ dàng bật/tắt đăng nhập trên trang bằng biến toàn cầu –

+0

Và đây là cách tốt nhất để tắt nhật ký? Cảm ơn! – vale

0

debugEnabled chức năng chỉ nên tắt $log.debug() tin nhắn. Vì vậy, nếu bạn muốn tắt ghi nhật ký với đơn giản config như bạn đã viết, sau đó đổi tên tất cả các cuộc gọi gỡ lỗi thành $log.debug, không phải $log.log hoặc $log.error hoặc $log.info hoặc $log.whatever.

Bạn có thể xem ví dụ ở đây http://jsfiddle.net/jccrosby/N2B6R/light/

+0

Với tôi $ log.debug tiếp tục hiển thị .. Tuy nhiên, cách tốt nhất để vô hiệu hóa tất cả các bản ghi khác nhau là gì? Tôi muốn giữ những người khác bởi vì tôi thích cách họ ưa thích trên bảng điều khiển. – vale

1

Dưới đây là hai của tôi cent:

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

Chỉ cần thiết lập boolean và thực hiện.

Các vấn đề liên quan