【发布时间】:2013-03-11 19:24:18
【问题描述】:
我正在尝试使用 $log.debug("Foo")。怎么能关掉。我在任何地方都找不到样品。我认为它需要在配置中设置,但我似乎也无法让它工作。
开关在哪里设置?
【问题讨论】:
标签: angularjs logging angularjs-log
我正在尝试使用 $log.debug("Foo")。怎么能关掉。我在任何地方都找不到样品。我认为它需要在配置中设置,但我似乎也无法让它工作。
开关在哪里设置?
【问题讨论】:
标签: angularjs logging angularjs-log
$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
默认开启。
【讨论】:
$logProvider.debugEnabled(false); 是否只是禁用.debug() 方法,而启用.log(), .info(), etc?
$log.debug 来限制自己。提供者中不应该有一个选项,允许禁用所有$log 服务输出。或者允许指定要离开的内容。现在这很有用。当然,我可以为$log 服务编写自己的服务包装器并从那里处理它..不知何故,但是这个选项又有什么意义呢?
您可以使用装饰器覆盖默认的 $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 的工作
【讨论】:
我也遇到过同样的问题,但这不是通过编码来解决的问题,而是从浏览器控制台启用它
转到浏览器的控制台并将级别设置为详细
【讨论】:
$log.debug 消息。
好吧,由于解决方案要求我们打开 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。
【讨论】:
基于 Diego 的回复,但添加了一些环境配置并使其更短。
您可以简单地使用: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;
});
【讨论】: