我用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
谢谢你的建议。
发布于 2015-10-17 03:56:50
下面是我如何在客户端完成同样的事情。我在我的主模块上定义了一个工厂方法,从而覆盖了默认的$log角度记录器。(angular已经在$log中定义了一个记录器)。这可能就是为什么你会得到一个未定义的$log。我还注意到您没有为您的附加器设置布局。我建议使用json布局。否则,你只能得到一个http post,而且你必须自己解析字符串。我不能帮助你的服务器端,因为我不知道你使用的是什么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() { 'use strict';
angular.module("main_module").directive('a directive', a_directive);
conContextualIntelligencePublisher.$inject = [ "blah"... , "$log"];
function a_directive(blah ... , $log) { ... }https://stackoverflow.com/questions/31326084
复制相似问题