/*
* 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).
*/
/*global console: true */
(function() {
"use strict"; //$NON-NLS-1$
/**
* An appender that uses native browser functions or Ext.log to send
* data to the browser console.
*
* The root logger has this singleton attached, so that all logging
* operations will go by default to the browser console, like this:
*
* {@img log-browser-console.png alt text}
*/
Ext.define('Sm.log.ExtLogAppender', { //$NON-NLS-1$
extend: 'Sm.log.AppenderBase',
singleton : true,
uses : ['Sm.log.util.Assert',
'Sm.log.Level'],
/**
* @protected
* @inheritDoc
*/
doLog : function(logEvent) {
var extLevel = null,
textMessage,
extMessage,
loggedObject = logEvent.loggedObject,
consoleArgs;
textMessage = this.formatLogAsText(logEvent);
consoleArgs = [textMessage];
if( loggedObject) {
consoleArgs.push(loggedObject);
}
Sm.log.util.Assert.assert(logEvent);
switch( logEvent.level) {
case Sm.log.Level.NONE.getName():
case Sm.log.Level.ALL.getName():
Sm.log.util.Debug.abort( "We should never arrive here");
break;
case Sm.log.Level.FATAL.getName():
case Sm.log.Level.ERROR.getName():
if( window.console && console.error &&
Ext.isFunction(console.error)) {
console.error.apply(console, consoleArgs);
return;
}
extLevel = "error";
break;
case Sm.log.Level.WARN.getName():
if( window.console && console.warn &&
Ext.isFunction(console.warn)) {
console.warn.apply(console, consoleArgs);
return;
}
extLevel = "warn";
break;
case Sm.log.Level.INFO.getName():
if( window.console && console.info &&
Ext.isFunction(console.info)) {
console.info.apply(console, consoleArgs);
return;
}
extLevel = "info";
break;
default:
if( window.console && console.log &&
Ext.isFunction(console.log)) {
console.log.apply(console, consoleArgs);
return;
}
extLevel = "log";
break;
}
extMessage = {msg : textMessage, level: extLevel};
if( loggedObject ) {
extMessage.dump = loggedObject;
}
Ext.log(extMessage);
}
});
}());