//<feature logger> Ext.define('Ext.log.writer.Remote', { extend: 'Ext.log.writer.Writer', requires: [ 'Ext.Ajax' ], config: { batchSendDelay: 100, onFailureRetryDelay: 500, url: '' }, isSending: false, sendingTimer: null, constructor: function() { this.queue = []; this.send = Ext.Function.bind(this.send, this); return this.callParent(arguments); }, doWrite: function(event) { var queue = this.queue; queue.push(event.message); if (!this.isSending && this.sendingTimer === null) { this.sendingTimer = setTimeout(this.send, this.getBatchSendDelay()); } }, send: function() { var queue = this.queue, messages = queue.slice(); queue.length = 0; this.sendingTimer = null; if (messages.length > 0) { this.doSend(messages); } }, doSend: function(messages) { var me = this; me.isSending = true; Ext.Ajax.request({ url: me.getUrl(), method: 'POST', params: { messages: messages.join("\n") }, success: function(){ me.isSending = false; me.send(); }, failure: function() { setTimeout(function() { me.doSend(messages); }, me.getOnFailureRetryDelay()); }, scope: me }); } }); //</feature>