Angularjs 是否可以在运行时设置调试日志级别?
是否可以切换Angularjs 是否可以在运行时设置调试日志级别?,angularjs,Angularjs,是否可以切换$logProvider.debugEnabled([flag])在运行时 当前情况: 在运行阶段从服务器加载角度客户端设置。取决于我要设置的设置方法$logProvider.debugEnabled([flag]) 提前谢谢你,Stevo对此的简短回答是:不,不是真的 一旦通过.config()块配置了应用程序,在应用程序启动后就不能进行进一步的配置 这是由于供应商的工作方式;它们仅在配置时可用。可能有一种方法可以强制配置,然后手动将新的$log服务重新注入到所有控制器中,但如果有
$logProvider.debugEnabled([flag])代码>在运行时
当前情况:
在运行阶段从服务器加载角度客户端设置。取决于我要设置的设置方法$logProvider.debugEnabled([flag])
提前谢谢你,Stevo对此的简短回答是:不,不是真的
一旦通过.config()
块配置了应用程序,在应用程序启动后就不能进行进一步的配置
这是由于供应商的工作方式;它们仅在配置时可用。可能有一种方法可以强制配置,然后手动将新的$log
服务重新注入到所有控制器中,但如果有方法,我不确定如何执行。我是通过
手动将$cookies注入配置块,然后
将其用作服务中的引用李>
在所有读取位置引用服务变量
'use strict';
app
.config(['$logProvider', function($logProvider ){
var $cookies;
angular.injector(['ngCookies']).invoke(['$cookies', function(_$cookies_) {
$cookies = _$cookies_;
}]);
var _enabled = $cookies.debugMode;
$logProvider.debugEnabled(_enabled);
}])
.factory('DebugSvc', ['$cookies', 'HttpMonitorSvc',function ($cookies, HttpMonitorSvc) {
return {
httpMonitor: HttpMonitorSvc,
debugMode: $cookies.debugMode || 'inactive',
setDebugMode: function (mode) {
var _logEnabled = $cookies.debugMode;
switch( mode ) {
case 'active':
_logEnabled = true;
break;
}
$cookies.debugMode = mode;
this.debugMode = mode;
}
};
}]);
我修饰了$log.debug(…)
以在运行时更改日志级别
通过查看,我想到了以下代码片段:
(function () {
var KEY = "debugEnabled";
angular.module("service.config", [])
.config(function ($provide, $logProvider) {
// AngularJS has debug enabled by default, but just to be sure...
$logProvider.debugEnabled(true);
// Disabling localStorageDebug (if not set)
if (localStorage.getItem(KEY) === null) {
localStorage.setItem(KEY, "false");
}
// add a check for localStorageDebug before actually calling $log.debug(...)
$provide.decorator('$log', function ($delegate) {
var debugFunction = $delegate.debug;
$delegate.debug = function () {
if (localStorage.getItem(KEY) !== "false") {
debugFunction.apply(undefined, arguments)
}
};
return $delegate;
});
})
.service("ConfigService", function ($log) {
this.debugEnabled = function (flag) {
$log.info("Setting debugEnabled to " + flag);
localStorage.setItem(KEY, flag.toString());
}
});
})();
// exposing ConfigService to global scope (be aware of possible clashes!),
// therefore making it easily accessible from the console
var cfg;
window.onload = function () {
cfg = angular.element(document.body).injector().get("ConfigService");
};
如果本地存储器中的debugEnabled
设置为true
,则装饰程序仅将调用转发到$log.debug
,该值可以通过ConfigService
服务更改
现在,您只需使用从服务器加载的值调用ConfigService#debugEnabled
,即可更改日志级别
由于有了最后四行代码,您还可以在控制台上简单地调用cfg.debugEnabled(true)
,以便在运行时启用调试模式
如果您不想在控制台中键入内容,可以避免使用全局cfg
,并使用javascript书签(或网站上的元素)更改日志级别。谢谢,我更改了应用程序配置。我基本上把设置放在一个JavaScript文件中,这样我在启动时就有了所有的设置。再次感谢!