我在angular js中有以下代码来准备一个记录器,用于向服务器发送消息。
var demo = angular.module('ng-logging', []);
demo.config(function ($provide) {
$provide.decorator('$log', function ($delegate, $sniffer) {
var _info = $delegate.info; //Saving the original behavior
var _error = $delegate.error; //Saving the original behavior
var log = log4javascript.getLogger();
var ajaxAppender = new log4javascript.AjaxAppender('/api/log');
ajaxAppender.setThreshold(log4javascript.Level.ALL);
log.addAppender(ajaxAppender);
$delegate.info = function (msg) {
_info(msg);
log.info(msg);
};
$delegate.error = function (msg) {
_error(msg);
log.error(msg);
};
return $delegate;
});
});
服务器端:
public class PaymentController : ApiController
{
[Route("api/log")]
public void Log(string message)
{
}
}
用法:我正在尝试使用上面配置的$ log提供程序向服务器发送消息,如下所示。
var payControllers = angular.module('pay.controllers', ['ui.bootstrap']);
payControllers.controller('PaymentCtrl', ['$scope', '$location', '$routeParams', 'payDataService',
function ($scope, $location, $routeParams, service, $log) {
$scope.sendPayment = function () {
$log.info("Sending payment");
};
}]);
当我测试这个时,我收到一条错误消息,说“$ log is undefined'”。我不确定实现这个的正确方法是什么。我试着关注这篇文章。 http://statelessprime.blogspot.com/2013/10/send-logging-and-exceptions-to-server.html
感谢您的任何建议。
答案 0 :(得分:0)
以下是我如何完成客户端相同的事情。我通过在主模块上定义工厂方法来覆盖默认的$ log角度记录器。 (angular已经在$ log中定义了一个记录器)。这可能是你得到$ log未定义的原因。我还注意到你没有为你的appender设置布局。我推荐使用json布局。否则你只得到一个http帖子,你必须自己解析字符串。我无法帮助您服务器端,因为我不知道您正在使用哪种Web框架。最后,不要忘记注入" $ log"进入你的工厂/指令。
angular.module('main_module')
.factory('$log', function() {
var logger = log4javascript.getLogger();
var ajaxAppender = new log4javascript.AjaxAppender("/restfulConfigApi/logger.api");
ajaxAppender.addHeader("Content-Type", "application/json");
ajaxAppender.setWaitForResponse(true);
ajaxAppender.setLayout(new log4javascript.JsonLayout());
//ajaxAppender.setRequestSuccessCallback(requestCallback);
logger.addAppender(ajaxAppender);
return logger;
});
注入$ log
的示例(function(){ '使用严格的';
angular.module("main_module").directive('a directive', a_directive);
conContextualIntelligencePublisher.$inject = [ "blah"... , "$log"];
function a_directive(blah ... , $log) { ... }