/* * Copyright © 2012, 2013 Pedro Agullo Soliveres. * * This file is part of Log4js-ext. * * Log4js-ext is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License. * * Commercial use is permitted to the extent that the code/component(s) * do NOT become part of another Open Source or Commercially developed * licensed development library or toolkit without explicit permission. * * Log4js-ext is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with Log4js-ext. If not, see <http://www.gnu.org/licenses/>. * * This software uses the ExtJs library (http://extjs.com), which is * distributed under the GPL v3 license (see http://extjs.com/license). */ /*jslint strict:false */ (function() { //"use strict"; //$NON-NLS-1$ // PAGRemoteLoggingDjn /** * @private * * An appender that performs remote logging using Direct for * sending log information. * * There are three standard remote appenders, one for log4j * (see {@link Sm.log.direct.DirectAppender#getLog4jAppender}), * another one for slf4j (see * {@link Sm.log.direct.DirectAppender#getSlf4jAppender}), * and a third one for Apache Commons Logging * (see * {@link Sm.log.direct.DirectAppender#getApacheCommonsLoggingAppender}). * * It is possible to define new remote appenders once they are * implemented at the server side. */ Ext.define('Sm.log.direct.DirectAppender', { //$NON-NLS-1$ extend : 'Sm.log.AppenderBase', config : { /** * @cfg (required) * @accessor * @readonly * * The Direct action with the log operation * */ loggingAction : null /** * @private * @method setLoggingAction */ }, statics : { /** * @private * @static * * Ensures that the DirectJNgine log provider is registered, and * only once. * * @returns {void} */ ensureStandardProviderRegistered : function () { var me = Sm.log.direct.DirectAppender, provider; if( !me.remotingApiRegistered) { provider = Ext.Direct.addProvider( Sm.log.direct.impl.REMOTING_API ); provider.maxRetries = 0; provider.timeout = 15000; } me.remotingApiRegistered = true; }, /** * @static * * Returns the standard log4j DirectJNgine based appender. * * @returns {Sm.log.direct.DirectAppender} * The standard log4j DirectJNgine based appender. */ getLog4jAppender : function () { var me = Sm.log.direct.DirectAppender; me.ensureStandardProviderRegistered(); if( !me.log4jAppender) { me.log4jAppender = new Sm.log.direct.DirectAppender( {loggingAction: Sm.log.direct.impl.DjnLog4jLogger}); } return me.log4jAppender; }, /** * @static * * Returns the standard slf4j DirectJNgine based appender. * * @returns {Sm.log.direct.DirectAppender} * The standard slf4j DirectJNgine based appender. */ getSlf4jAppender : function () { var me = Sm.log.direct.DirectAppender; Sm.log.direct.DirectAppender.ensureStandardProviderRegistered(); if( !me.slf4jAppender) { me.slf4jAppender = new Sm.log.direct.DirectAppender( {loggingAction: Sm.log.direct.impl.DjnSlf4jLogger}); } return me.slf4jAppender; }, /** * @static * * Returns the standard Apache Commmons Logging * DirectJNgine based appender. * * @returns {Sm.log.direct.DirectAppender} * The standard Apache Commmons Logging DirectJNgine based appender. */ getApacheCommonsLoggingAppender : function () { var me = Sm.log.direct.DirectAppender; Sm.log.direct.DirectAppender.ensureStandardProviderRegistered(); if( !me.apacheCommonsLoggingAppender) { me.apacheCommonsLoggingAppender = new Sm.log.direct.DirectAppender( {loggingAction: Sm.log.direct.impl.DjnApacheCommonsLogger}); } return me.apacheCommonsLoggingAppender; } }, /** * @private Package * * Creates a new remote appender, passing the Direct action that * provides the log operation. * * Of course, you must make sure that the provider for that action * is already registered. * * @param {Object} cfg.loggingAction * The Direct action that provides the log operation. */ constructor : function(cfg) { this.callParent(arguments); Sm.log.util.Assert.assert(cfg.loggingAction); // We need a layout that does not highlight logged objects, // for remote loggers do not understand HTML as a rule this.setLayout(new Sm.log.LayoutBase()); this.getLayout().highlightLoggedObject = false; }, /** * @protected * * @inheritDoc */ doLog : function(logEvent) { // Add data that is relevant to server logEvent.timeMillis = logEvent.time.getTime(); // Remove data that is irrelevant to server delete logEvent.time; // Wants timeMillis & formattedTime delete logEvent.message; // Wants formattedMessage delete logEvent.formatParams; // Server can't format with js object delete logEvent.loggedObject; // Server can't cope with js object delete logEvent.levelLevel; // Makes no sense for server this.getLoggingAction().log(logEvent, { success: function (result, request){ Sm.log.util.Assert.assert( result === true ); }, failure: function (result, request){ Sm.log.util.Debug.abort(); } } ); } }); }());